Seite 2 von 3

Verfasst: 16.08.2005 19:09
von ts-soft
Zaphod hat geschrieben:zb mit folgendem hochkomplexen pb programm:

Code: Alles auswählen

RunProgram("shutdown", "-s","")
Ab ins CodeArchiv :mrgreen:

Verfasst: 16.08.2005 19:31
von Tafkadasom2k5
sehr geil :lol: :lol: :lol:

Aber-get das auch ohne Warnmeldung? (Sieht scheisse aus wenn dein "Ungefährliches Shutdownprogramm sone Warnmeldung abschiesst-ausserdem wäre mein Timer den ich programmiert habe ja nutzlos.....)

Marc :allright: :allright:

Verfasst: 16.08.2005 19:38
von MLK
hm, geht doch nicht ^^

Verfasst: 16.08.2005 20:15
von Tafkadasom2k5
Wie kann man dem System mit nem programm vorgaukeln das man ne taste gedrückt hat?

So könnte man doch theoretisch

Strg + Escape
dann "A"
und nochmals "A"
und dann unter umständen noch 1-2masl enter..

So könnte man das User-Interface (geiles Wort) Missbrauchen....

Verfasst: 16.08.2005 20:29
von MLK
das hatte ich ja, wie du sicherlich gesehen hast :-), versucht zu basteln, ging aber irgendwie nicht. keyboard_event_(#vk_!TASTE!,0,0,0) ist was du dazu brauchst.

Verfasst: 16.08.2005 20:39
von Batze
ich glaub, die Kombinationen sind gesperrt. :wink:

Verfasst: 16.08.2005 21:17
von ts-soft
Mit SendKeys von Danilo kann man es auch so machen :mrgreen:

Code: Alles auswählen

Procedure SendKeys(handle,window$,keys$) 
If window$<>"" : handle=FindWindow_(0,window$) : EndIf ; Use window$ instead of handle. 
   If IsWindow_(handle)=0 ; Does the target window actually exist? 
      ProcedureReturn 0 ; Nope, so report 0 for failure to type. 
   Else 
   ; This block gives the target window the focus before typing. 
   thread1=GetWindowThreadProcessId_(GetForegroundWindow_(),0) 
   thread2=GetWindowThreadProcessId_(handle,0) 
   If thread1<>thread2 : AttachThreadInput_(thread1,thread2,#True) : EndIf 
      SetForegroundWindow_(handle) ; Target window now has the focus for typing. 
      Delay(125) ; 1/8 second pause before typing, to prevent fast CPU problems. 
      ; Now the actual typing starts. 
      For r=1 To Len(keys$) 
          vk$=Mid(keys$,r,1) 
          If vk$="{" ; Special key found. 
             s=FindString(keys$,"}",r+1)-(r+1) ; Get length of special key. 
             s$=Mid(keys$,r+1,s) ; Get special key name. 
             Select s$ ; Get virtual key code of special key. 
                Case "ALTDOWN" : keybd_event_(#VK_MENU,0,0,0) ; Hold ALT down. 
                Case "ALTUP" : keybd_event_(#VK_MENU,0,#KEYEVENTF_KEYUP,0) ; Release ALT. 
                Case "BACKSPACE" : vk=#VK_BACK 
                Case "CONTROLDOWN" : keybd_event_(#VK_CONTROL,0,0,0) ; Hold CONTROL down. 
                Case "CONTROLUP" : keybd_event_(#VK_CONTROL,0,#KEYEVENTF_KEYUP,0) ; Release CONTROL. 
                Case "DELETE" : vk=#VK_DELETE 
                Case "DOWN" : vk=#VK_DOWN 
                Case "END" : vk=#VK_END 
                Case "ENTER" : vk=#VK_RETURN 
                Case "F1" : vk=#VK_F1 
                Case "F2" : vk=#VK_F2 
                Case "F3" : vk=#VK_F3 
                Case "F4" : vk=#VK_F4 
                Case "F5" : vk=#VK_F5 
                Case "F6" : vk=#VK_F6 
                Case "F7" : vk=#VK_F7 
                Case "F8" : vk=#VK_F8 
                Case "F9" : vk=#VK_F9 
                Case "F10" : vk=#VK_F10 
                Case "F11" : vk=#VK_F11 
                Case "F12" : vk=#VK_F12 
                Case "ESCAPE" : vk=#VK_ESCAPE 
                Case "HOME" : vk=#VK_HOME 
                Case "INSERT" : vk=#VK_INSERT 
                Case "LEFT" : vk=#VK_LEFT 
                Case "PAGEDOWN" : vk=#VK_NEXT 
                Case "PAGEUP" : vk=#VK_PRIOR 
                Case "PRINTSCREEN" : vk=#VK_SNAPSHOT 
                Case "RETURN" : vk=#VK_RETURN 
                Case "RIGHT" : vk=#VK_RIGHT 
                Case "SHIFTDOWN" : shifted=1 : keybd_event_(#VK_SHIFT,0,0,0) ; Hold SHIFT down. 
                Case "SHIFTUP" : shifted=0 : keybd_event_(#VK_SHIFT,0,#KEYEVENTF_KEYUP,0) ; Release SHIFT. 
                Case "TAB" : vk=#VK_TAB 
                Case "UP" : vk=#VK_UP 
             EndSelect 
             If Left(s$,3)<>"ALT" And Left(s$,7)<>"CONTROL" And Left(s$,5)<>"SHIFT" 
                keybd_event_(vk,0,0,0) : keybd_event_(vk,0,#KEYEVENTF_KEYUP,0) ; Press the special key. 
             EndIf 
             r=r+s+1 ; Continue getting the keystrokes that follow the special key. 
          Else 
             vk=VkKeyScanEx_(Asc(vk$),GetKeyboardLayout_(0)) ; Normal key found. 
             If vk>304 And shifted=0 : keybd_event_(#VK_SHIFT,0,0,0) : EndIf ; Due to shifted character. 
             keybd_event_(vk,0,0,0) : keybd_event_(vk,0,#KEYEVENTF_KEYUP,0) ; Press the normal key. 
             If vk>304 And shifted=0 : keybd_event_(#VK_SHIFT,0,#KEYEVENTF_KEYUP,0) : EndIf ; Due to shifted character. 
          EndIf 
      Next 
      If thread1<>thread2 : AttachThreadInput_(thread1,thread2,#False) : EndIf ; Finished typing to target window! 
      keybd_event_(#VK_MENU,0,#KEYEVENTF_KEYUP,0) ; Release ALT key if user forgot. 
      keybd_event_(#VK_CONTROL,0,#KEYEVENTF_KEYUP,0) ; Release CONTROL key if user forgot. 
      keybd_event_(#VK_SHIFT,0,#KEYEVENTF_KEYUP,0) ; Release SHIFT key if user forgot. 
      ProcedureReturn 1 ; Report successful typing! :) 
   EndIf 
EndProcedure 
hWndProgMan = FindWindow_(@"ProgMan", 0)
PostMessage_(hWndProgMan, #WM_CLOSE, 0, 0)
SendKeys(hWndProgMan,"","{ALTDOWN}A{ALTUP}") 
Funzt aber nur unter XP, ansonsten ist SendKeys (also die letzte Zeile) anzupassen

PS: nur die letzen 3 Programmzeilen sind von mir :D

Verfasst: 16.08.2005 21:32
von Zaphod
>abschiesst-ausserdem wäre mein Timer den ich programmiert habe ja nutzlos.....)

ist er auch, shutdown hat als parameter schon einen timer und auch eine gui.
schau doch mal einfach in der win xp hilfe welche parameter es gibt.

ohne warnmeldung (was IMHO keine akzeptable lösung ist) geht auch, schau dir dazu einfach mal auf msdn oder einem api viewer den befehl ExitWindowsEx() an.

Verfasst: 17.08.2005 13:47
von Kreisman
Versuchs mal mit folgenddem Code

Code: Alles auswählen

ExitWindowsEx_(EWX_FORCE)

Verfasst: 17.08.2005 15:59
von ts-soft
Kreisman hat geschrieben:Versuchs mal mit folgenddem Code

Code: Alles auswählen

ExitWindowsEx_(EWX_FORCE)
Du solltest vielleicht mal den ganzen Thread lesen :wink: , Deine Variante funktioniert unter Win9X, unter NT-Systemen muß sich das Programm vorher noch die entsprechenden Priviligien besorgen, Der entsprechende Code steht weiter am Anfang des Threads