Hallo Forum!
Hat man einen ständigen Outlook abgleich laufen
dann geht einem das minütliche Bestätigen der sicherheits Abfrage doch schnell auf die Nerven. Sicher ists auch nicht mehr, da man irgendwann ohne nachdenken klickt und Outlook eh nicht angibt, wer oder was zugreifen will.
Also wollte ich es automatisieren, es gibt zwar schon ein Programm dafür aber die eigenen sind einem ja doch lieber ) Also zum Thema: Habe folgende enumWindow Routine und bekomme, das letzte kleine Stück nicht hin:
<pre>
function isOutlook(h:THandle):Boolean;
var p : THandle;
Buffer : Array[0..99] of char;
begin
GetWindowText(h, Buffer, 100);
result := pos('outlook', lowercase(buffer)) > 0;
if result then exit;
p := GetWindowLong(h, GWL_HWNDPARENT);
if p <> 0 then result := isOutlook(p);
end;
<p>
function enumWins(Window: HWND; l:lparam): Boolean; StdCall;
var
Buffer : Array[0..99] of char;
clBuffer : Array[0..99] of char;
id : integer;
begin
Result:= True;
FillChar(clBuffer, 99, #0);
getClassName(window, buffer, 100);
FillChar(Buffer, 99, #0);
GetWindowText(Window, Buffer, 100);
if (l = 0) and isOutlook(window) then begin
if IsWindowVisible(window) then
enumChildWindows(window, @enumWins, window);
end else begin
if (clBuffer = '') and (pos('&Zugriff gew', buffer) = 1) then begin
if sendMessage(window, BM_GetCheck, 0 , 0) = BST_UNCHECKED then begin
// sendMessage(window, BM_SETCHECK, BST_CHECKED , 0);
sendMessage(window, WM_LBUTTONDown, 3, 5);
sleep(10);
sendMessage(window, WM_LBUTTONUp, 5, 3);
end;
//neuer Aufruf, da okay button ja zuerst gefunden sein könnte...
enumChildWindows(l, @enumWins, l);
end else if (clBuffer = '') and (pos('Ja', buffer) = 1) then begin
inc(treffer);
SetActiveWindow(l);
mouse.Capture := l;
enableWindow(l, true);
setFocus(l);
sendMessage(window, WM_LBUTTONDown, 3, 5);
sleep(10);
sendMessage(window, WM_LBUTTONUp, 5, 3);
sleep(10);
id := GetDlgCtrlID(window);
sendMessage(l, WM_COMMAND, makelong(id, BN_CLICKED), window);
end;
end;
end;
</pre> Ihr seht ich habe schon eine Menge gebastelt und probiert ;( Also die Checkbox wird gecheckt, die Combobox wird dabei auch enabled (war bei einfacher BM_SETCHECKED Message nicht der Fall). Der OK Schalter wird aber immer munter gedrück, ohne das das Fenster sich schließt und weiterarbeitet. Man muss einmal mit der Maus irgendwohin klicken ( Taskleiste oder andere Anwendung reicht!), dann schliesst sich das Fenster und Outlook arbeitet fröhlich weiter. Woran liegts?
Hat man einen ständigen Outlook abgleich laufen
dann geht einem das minütliche Bestätigen der sicherheits Abfrage doch schnell auf die Nerven. Sicher ists auch nicht mehr, da man irgendwann ohne nachdenken klickt und Outlook eh nicht angibt, wer oder was zugreifen will.
Also wollte ich es automatisieren, es gibt zwar schon ein Programm dafür aber die eigenen sind einem ja doch lieber ) Also zum Thema: Habe folgende enumWindow Routine und bekomme, das letzte kleine Stück nicht hin:
<pre>
function isOutlook(h:THandle):Boolean;
var p : THandle;
Buffer : Array[0..99] of char;
begin
GetWindowText(h, Buffer, 100);
result := pos('outlook', lowercase(buffer)) > 0;
if result then exit;
p := GetWindowLong(h, GWL_HWNDPARENT);
if p <> 0 then result := isOutlook(p);
end;
<p>
function enumWins(Window: HWND; l:lparam): Boolean; StdCall;
var
Buffer : Array[0..99] of char;
clBuffer : Array[0..99] of char;
id : integer;
begin
Result:= True;
FillChar(clBuffer, 99, #0);
getClassName(window, buffer, 100);
FillChar(Buffer, 99, #0);
GetWindowText(Window, Buffer, 100);
if (l = 0) and isOutlook(window) then begin
if IsWindowVisible(window) then
enumChildWindows(window, @enumWins, window);
end else begin
if (clBuffer = '') and (pos('&Zugriff gew', buffer) = 1) then begin
if sendMessage(window, BM_GetCheck, 0 , 0) = BST_UNCHECKED then begin
// sendMessage(window, BM_SETCHECK, BST_CHECKED , 0);
sendMessage(window, WM_LBUTTONDown, 3, 5);
sleep(10);
sendMessage(window, WM_LBUTTONUp, 5, 3);
end;
//neuer Aufruf, da okay button ja zuerst gefunden sein könnte...
enumChildWindows(l, @enumWins, l);
end else if (clBuffer = '') and (pos('Ja', buffer) = 1) then begin
inc(treffer);
SetActiveWindow(l);
mouse.Capture := l;
enableWindow(l, true);
setFocus(l);
sendMessage(window, WM_LBUTTONDown, 3, 5);
sleep(10);
sendMessage(window, WM_LBUTTONUp, 5, 3);
sleep(10);
id := GetDlgCtrlID(window);
sendMessage(l, WM_COMMAND, makelong(id, BN_CLICKED), window);
end;
end;
end;
</pre> Ihr seht ich habe schon eine Menge gebastelt und probiert ;( Also die Checkbox wird gecheckt, die Combobox wird dabei auch enabled (war bei einfacher BM_SETCHECKED Message nicht der Fall). Der OK Schalter wird aber immer munter gedrück, ohne das das Fenster sich schließt und weiterarbeitet. Man muss einmal mit der Maus irgendwohin klicken ( Taskleiste oder andere Anwendung reicht!), dann schliesst sich das Fenster und Outlook arbeitet fröhlich weiter. Woran liegts?
Comment