Registriert seit: 25. Mai 2006
Ort: Rostock / Bremen
2.037 Beiträge
Delphi 7 Enterprise
|
Re: Text (Pfadangabe) per Windows Message verschicken
16. Mai 2009, 19:31
OK, aber wenn ich auf ungleichheit Prüfe kommt bei mir der Fehler, also ist GlobalLock fehlgeschlagen, aber wieso??
Meine Funktionen:
Senden:
Delphi-Quellcode:
procedure GlobalAllocFileName(aWnd: HWND; aText: String);
var
Data: THandle;
DataPtr: Pointer;
Size: Integer;
oldWND: HWND;
begin
{ Size := Length(aText) + 1;
Data := GlobalAlloc(GMEM_MOVEABLE or GMEM_DDESHARE, Size);
try
DataPtr := GlobalLock(Data);
try
CopyMemory(DataPtr, PChar(aText), Size);
finally
GlobalUnlock(Data);
end;
SendMessage(aWnd, WM_TSOPLAYFILE, data, 0);
finally
GlobalFree(Data);
end; }
Data := GlobalAlloc({GMEM_MOVEABLE or GMEM_DDESHARE}GHND, Length(aText) + 1);
If Data <> 0 Then Begin
DataPtr := GlobalLock(Data);
If DataPtr <> nil Then Begin
CopyMemory(DataPtr, PChar(aText), Length(aText) + 1);
If SendMessage(aWnd, WM_TSOPLAYFILE, Data, 0) = 0 Then {Fehler}
begin
MessageBox(0, 'senden fehlgeschlagen', 'fehler', MB_OK or MB_ICONWARNING);
GlobalUnlock(Data);
end;
End Else {Fehler}
MessageBox(0, 'dataptr leer', 'fehler', MB_OK or MB_ICONWARNING);
GlobalFree(Data);
End Else {Fehler}
MessageBox(0, 'data leer', 'fehler', MB_OK or MB_ICONWARNING);
end;
Empfangen:
Delphi-Quellcode:
function GetAllocFileName(wParam: WPARAM): PChar; //wparam ist nicht 0
var
DataPtr: Pointer;
begin;
Result := '';
DataPtr := GlobalLock(wParam); //aber hier gibts nen "nil" ich vermute das hier irgendwo mein Fehler steckt
If DataPtr <> nil Then Begin
Try
Result := PChar(DataPtr); // oder sonstwas
MessageBox(0, 'get - pointer nil', 'fehler', MB_OK or MB_ICONWARNING);
Finally
GlobalUnlock(wParam);
End;
End Else {Fehler}
MessageBox(0, 'get - dataptr leer', 'fehler', MB_OK or MB_ICONWARNING);
end;
Nachrichtenschleife vom Hauptprogramm:
Delphi-Quellcode:
WM_TSOPLAYFILE:
begin;
MSGFile := GetAllocFileName(wParam);//PChar(@wParam);
MessageBox(0, MSGFile, 'param', MB_OK or MB_ICONWARNING);
if FileExists(MSGFile) then
begin;
PostMessage(HWND_TOPMOST, WM_COMMAND, MAKELONG(IDC_BMPBUTTON2, BN_CLICKED), 0);
if Succeeded(CheckFile(MSGFile)) then
PostMessage(HWND_TOPMOST, WM_COMMAND, MAKELONG(IDC_BMPBUTTON1, BN_CLICKED), 0)
end;
Result := 1;
end;
initialization abschnitt von der Anwendung:
Delphi-Quellcode:
initialization
begin;
if paramcount > 0 then
Param := paramstr(1);
tMutex := CreateMutex(nil, True, ClassName);
if GetLastError = ERROR_ALREADY_EXISTS then
begin;
if fileexists(Param) then
begin;
if (FindWindow(ClassName, AppName) > 0) then
GlobalAllocFileName(FindWindow(ClassName, AppName), Param)
// PostMessage(FindWindow(ClassName, AppName), WM_TSOPLAYFILE, INTEGER(@Param), 0)
end
else
MessageBox(0, 'The Program is already running.', ClassName, MB_OK or MB_ICONWARNING);
Halt;
end;
end;
Sorry für nen bissel viel Code
|