Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Laufwerk C:\ öffnen und beenden (https://www.delphipraxis.net/47424-laufwerk-c-%5C-oeffnen-und-beenden.html)

billy-boy 10. Jun 2005 23:10


Laufwerk C:\ öffnen und beenden
 
Hi,
ich bin am verzweifeln, vielleicht könnt ihr mir ja helfen:
Ich möchte ein Programm schreiben, dass das Laufwerk C:\ anzeigt (also wie, wenn man Arbeitsplatz -> C klickt) und es dann auch wieder selbsständig schließen kann (nach einer gewißen Zeit).

Ich habe schon probiert einen Process zu Createn, wo ich das HWND zurückbekomme von der explorer.exe mit der ich es getestet hatte, aber irgendwie ging das dann nicht zu beenden. Ich weiß nicht mehr weiter, mein Problem ist erstens: Wie öffne ich überhaupt das Laufwerk? Und zweitens: Wie bekomme ich das Handle um es dann wieder zu schließen?

Vielen Dank im vorraus
Markus

Daniel G 10. Jun 2005 23:25

Re: Laufwerk C:\ öffnen und beenden
 
Zitat:

Zitat von billy-boy
Ich weiß nicht mehr weiter, mein Problem ist erstens: Wie öffne ich überhaupt das Laufwerk? Und zweitens: Wie bekomme ich das Handle um es dann wieder zu schließen?

Was genau meinst du mit "öffnen"?

billy-boy 10. Jun 2005 23:28

Re: Laufwerk C:\ öffnen und beenden
 
Naja, das es sich genauso öffnet, wie wenn du auf Arbeitsplatz und dann auf C:\ klickst, nur, dass das Programm es öffnet ;)

nailor 10. Jun 2005 23:30

Re: Laufwerk C:\ öffnen und beenden
 
Schau dir mal unter Beispiele den ShellListView, ShellTreeView und die ShellComboBox an. (als alternative)

Die Muhkuh 11. Jun 2005 07:34

Re: Laufwerk C:\ öffnen und beenden
 
Hi,

ich hoffe ich habe dich richtig verstanden. Wenn ja, dann geht das so:

Delphi-Quellcode:
interface
uses {Andere Units}, ShellApi;

...

implementation

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShellExecute(Handle, 'open', 'C:\', nil, nil, SW_SHOWNORMAL); // Laufwerk C: öffnen
end;

// By toms [url]http://www.delphipraxis.net/post371887.html#371887[/url]
function FindWindowByTitle(WindowTitle: string): Hwnd;
var
  NextHandle: Hwnd;
  NextTitle: array[0..255] of char;
begin
  // Get the first window
  NextHandle := GetWindow(Application.Handle, GW_HWNDFIRST);
  while NextHandle > 0 do
  begin
    // retrieve its text
    GetWindowText(NextHandle, NextTitle, 255);
    if Pos(WindowTitle, StrPas(NextTitle)) <> 0 then
    begin
      Result := NextHandle;
      Exit;
    end
    else
      // Get the next window
      NextHandle := GetWindow(NextHandle, GW_HWNDNEXT);
  end;
  Result := 0;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  Wnd: HWND;
begin
  Wnd := FindWindowByTitle('(C:)'); // Laufwerk C: suchen (Siehe Code von toms)

  if Handle <> 0 then
    PostMessage(Wnd, WM_CLOSE, 0, 0); // Wenns gefunden wurde, dann beenden
end;
Die Buttonklicks musst du natürlich nicht übernehmen. Das war nur für mich zum Testen. Den letzten Code kannst du z.B. in einen Timer schreiben um C: wieder zu schließen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:50 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz