ActivateWindow für Konsole

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

> Edel, gibt es den Befehl nicht nur unter WinXP o_O?

zumindest unter W2K prof. funktioniert es auch.

Grüße ... Kiffi
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Ja , erst ab Windows 2000 .

Programmiert noch einer unter Windows ME , 98 oder sogar 95 :? (brauch keine Antwort)
Benutzeravatar
Ironsmurf
Beiträge: 111
Registriert: 04.01.2006 12:57
Computerausstattung: AMD FX(tm)-6300 Six-Core Processor
3.50 GHz / 8 GB Ram
Windows 7 / 64bit / Ultimate
Purebasic 5.20 LTS (Windows - x86)
Wohnort: Deutschland

Beitrag von Ironsmurf »

probiere gerade das Script von EDEL aus, aber in der ersten Zeile

Code: Alles auswählen

import "kernel32.lib"
erscheint sofort SYNTAX ERROR ?

PS: Benutze XP und PB 3.94
Es kommt immer auf die Sichtweise des Betrachters an.
Benutzeravatar
Ironsmurf
Beiträge: 111
Registriert: 04.01.2006 12:57
Computerausstattung: AMD FX(tm)-6300 Six-Core Processor
3.50 GHz / 8 GB Ram
Windows 7 / 64bit / Ultimate
Purebasic 5.20 LTS (Windows - x86)
Wohnort: Deutschland

Beitrag von Ironsmurf »

PS: Habe die Datei

kernel32.lib

schon in die entsprechenden Verzeichnisse kopiert
Es kommt immer auf die Sichtweise des Betrachters an.
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Import gibt es erst ab 4.0 , schreibe deine Version bitte
mit in deine Signatur.

Code: Alles auswählen

If OpenConsole()
  
  hLib              = GetModuleHandle_("Kernel32") 
  GetConsoleWindow  = GetProcAddress_(hLib,"GetConsoleWindow")
  Handle            = CallFunctionFast(GetConsoleWindow)
  
  RunProgram("calc.exe")
  Delay(50) ; warten bis das programm fertig geladen wurde
  SendMessage_(Handle,#WM_ACTIVATE,#WA_ACTIVE,0)
  
  Input()
  CloseConsole()
EndIf
Ironsmurf hat geschrieben:PS: Habe die Datei

kernel32.lib

schon in die entsprechenden Verzeichnisse kopiert
Brauchst du nicht, auch unter 4.0 nicht.
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

Code: Alles auswählen

Procedure EnumPrc(lhWnd.l, *pParam.LONG)
    Protected sTitleA.s, sTitleB.s, lPID.l
    Static *pBufferA, *pBufferB
    
    If Not *pBufferA: *pBufferA = AllocateMemory($400): EndIf
    If Not *pBufferB: *pBufferB = AllocateMemory($400): EndIf
    
    If GetConsoleTitle_(*pBufferA, MemorySize(*pBufferA))
        GetWindowText_(lhWnd, *pBufferB, MemorySize(*pBufferB))
       
        If Not CompareMemoryString(*pBufferA, *pBufferB)
            GetWindowThreadProcessId_(lhWnd, @lPID)            
            
            If lPID = GetCurrentProcessId_() And *pParam
                *pParam\l = lhWnd
                
            Else
                ProcedureReturn #True
            EndIf
            
            ProcedureReturn #False
            
        Else
            ProcedureReturn #True
        EndIf
        
    Else
        ProcedureReturn #True
    EndIf
EndProcedure

Procedure KonsolehWnd()
    Protected lDLL, lhWnd
    
    If OSVersion() => #PB_OS_Windows_2000
        lDLL = OpenLibrary(#PB_Any, "Kernel32.dll")
        If lDLL
            If GetFunction(lDLL, "GetConsoleWindow")
                lhWnd = CallFunction(lDLL, "GetConsoleWindow")
                
            Else
                EnumWindows_(@EnumPrc(), @lhWnd)
            EndIf
            
            CloseLibrary(lDLL)
            ProcedureReturn lhWnd
            
        Else
            ProcedureReturn #False
        EndIf
        
    Else
        EnumWindows_(@EnumPrc(), @lhWnd)
        ProcedureReturn lhWnd
    EndIf
EndProcedure

OpenConsole()
SetWindowText_(KonsolehWnd(), "test")

Repeat
    Delay(1)
Until GetAsyncKeyState_(#VK_ESCAPE)
Bild
Antworten