Also, ich kann mit
Code: Alles auswählen
RunProgram("sndvol32","","")
Danke im voraus!
Code: Alles auswählen
RunProgram("sndvol32","","")
Code: Alles auswählen
Global hook
Global hWnd
Global Quit
Procedure WinProc(nCode.l,wParam.l,lParam.l)
*mymsg.MSG=lParam
myRect.RECT
GetWindowRect_(*mymsg\hWnd,myRect.RECT)
Weite=myRect\right-myRect\left
Select *mymsg\message
Case #WM_CLOSE
Quit=1
CloseWindow_(hWnd)
EndSelect
ProcedureReturn CallNextHookEx_(hook,nCode,wParam,lParam)
EndProcedure
RunProgram("sndvol32","/record","")
While hWnd=0
hWnd=FindWindow_(0,"Aufnahme")
Delay(10)
Wend
hook=SetWindowsHookEx_(#WH_GETMESSAGE,@WinProc(),GetModuleHandle_(0),GetWindowThreadProcessId_(hWnd,0))
If hWnd
Repeat
Delay(1)
Until Quit=1
EndIf
Kiffi hat geschrieben:Wieso ist das eine russische Methode?
Blackskyliner hat geschrieben:Dann Hookst du einfach das Fenster, setzt dann die Checkbox auf 1 und die andere auf 0 und dann machste das Fenster wieder zu. Das wäre dann die russische Variante das zu machen was du willst
Hab keinen anderen ausweg gesehen ... bin ich blind?Kiffi hat geschrieben:Wieso willst Du das 'hooken'?
llllllllllllloooooooooolllllllllllllllll ..... neinKaeru Gaman hat geschrieben:lol... spielst du jetzt den hooker-könig?
Code: Alles auswählen
Structure MIXERCONTROL
cbStruct.l
dwControlID.l
dwControlType.l
fdwControl.l
cMultipleItems.l
szShortName.b[#MIXER_SHORT_NAME_CHARS]
szName.b[#MIXER_LONG_NAME_CHARS]
lMinimum.l
lMaximum.l
dwMinimum.l
dwMaximum.l
Reserved.l[6]
cSteps.l
cbCustomData.l
dwReserved.l[6]
EndStructure
Procedure ASL_MixerGetRecordChannel(mixerID,*ChannelNumber)
mxl.MIXERLINE
mxl\cbStruct=SizeOf(MIXERLINE)
mxl\dwComponentType=#MIXERLINE_COMPONENTTYPE_DST_WAVEIN
Result=mixerGetLineInfo_(mixerID,mxl,#MIXER_GETLINEINFOF_COMPONENTTYPE)
mxlctrls.MIXERLINECONTROLS
mxlctrls\cbStruct=SizeOf(MIXERLINECONTROLS)
mxlctrls\dwLineID=mxl\dwLineID
mxlctrls\cControls=mxl\cControls
mxlctrls\dwControlType=#MIXERCONTROL_CONTROLTYPE_MUX
mxlctrls\cbmxctrl=SizeOf(MIXERCONTROL)
Bytes=(SizeOf(MIXERCONTROL)* mxlctrls\cControls)
*control=AllocateMemory(Bytes)
mxlctrls\pamxctrl=*control
Result=mixerGetLineControls_(mixerID,mxlctrls,#MIXER_GETLINECONTROLSF_ONEBYTYPE)
CopyMemory(*Control,ctrl.Mixercontrol,SizeOf(Mixercontrol))
For i=0 To mxl\cControls-1
CopyMemory(*Control+(i*SizeOf(Mixercontrol)),ctrl.Mixercontrol,SizeOf(Mixercontrol))
Next
If ctrl\dwControlType=#MIXERCONTROL_CONTROLTYPE_MUX
mcd.MIXERCONTROLDETAILS
mcd\cbStruct = SizeOf(MIXERCONTROLDETAILS)
mcd\cChannels=1
PokeL(mcd+12,ctrl\cMultipleItems)
mcd\cbDetails = SizeOf(MIXERCONTROLDETAILS_BOOLEAN)
*lv=AllocateMemory(mcd\cChannels*ctrl\cMultipleItems*mcd\cbDetails)
mcd\paDetails=*lv
Result=mixerGetControlDetails_(mixer,mcd,#MIXER_GETCONTROLDETAILSF_VALUE)
For i=0 To ctrl\cMultipleItems-1
If PeekL(*lv+i*4)=1
NumberSelect=i
EndIf
Next
NameSelect.s=s$
PokeL(*ChannelNumber,NumberSelect)
ProcedureReturn #True
EndIf
ProcedureReturn #False
EndProcedure
Procedure KillProcess(PID)
#PROCESS_TERMINATE=$1
#PROCESS_CREATE_THREAD=$2
#PROCESS_VM_OPERATION=$8
#PROCESS_VM_READ=$10
#PROCESS_VM_WRITE=$20
#PROCESS_DUP_HANDLE=$40
#PROCESS_CREATE_PROCESS=$80
#PROCESS_SET_QUOTA=$100
#PROCESS_SET_INFORMATION=$200
#PROCESS_QUERY_INFORMATION=$400
#PROCESS_ALL_ACCESS=#STANDARD_RIGHTS_REQUIRED|#SYNCHRONIZE|$FFF
result=#False
phandle=OpenProcess_(#PROCESS_TERMINATE,#True,PID)
If phandle <> #Null
If TerminateProcess_(phandle,1)
result=#True
EndIf
CloseHandle_(phandle)
EndIf
ProcedureReturn result
EndProcedure
Procedure Kill_Prozess_by_Name(ProcName.s)
PID.l=0
#TH32CS_SNAPHEAPLIST=$1
#TH32CS_SNAPPROCESS=$2
#TH32CS_SNAPTHREAD=$4
#TH32CS_SNAPMODULE=$8
#TH32CS_SNAPALL=#TH32CS_SNAPHEAPLIST|#TH32CS_SNAPPROCESS|#TH32CS_SNAPTHREAD|#TH32CS_SNAPMODULE
#TH32CS_INHERIT=$80000000
#INVALID_HANDLE_VALUE=-1
#Process32lib=9999
NewList Process32.PROCESSENTRY32()
Global Proc32.PROCESSENTRY32
If OpenLibrary(#Process32Lib,"kernel32.dll")
snap=CallFunction(#Process32lib,"CreateToolhelp32Snapshot",#TH32CS_SNAPPROCESS,0)
If snap
DefType.Processentry32
Proc32\dwSize=SizeOf(Processentry32)
If CallFunction(#Process32lib,"Process32First",snap,@Proc32)
AddElement(Process32())
CopyMemory(@Proc32,@Process32(),SizeOf(Processentry32))
While CallFunction(#Process32lib,"Process32Next",snap,@Proc32)
AddElement(Process32())
CopyMemory(@Proc32,@Process32(),SizeOf(Processentry32))
Wend
EndIf
CloseHandle_(snap)
EndIf
CloseLibrary(#Process32lib)
EndIf
ResetList(Process32())
While NextElement(Process32())
If UCase(ProcName.s)=UCase(PeekS(@Process32()\szExeFile))
PID=PeekL(@Process32()\th32ProcessID)
EndIf
Wend
If PID>1
If KillProcess(PID)
ProcedureReturn #True
EndIf
EndIf
ProcedureReturn #False
EndProcedure
Procedure SetMixerTo(State)
ASL_MixerGetRecordChannel(0,@ChannelNumber)
If ChannelNumber<>State
prog=RunProgram("sndvol32","/record","")
While hWnd=0
Delay(100)
hWnd=FindWindow_(0,"Aufnahme")
Wend
keybd_event_(18,0,0,0)
keybd_event_(18,0,#KEYEVENTF_KEYUP,0)
keybd_event_(65,0,0,0)
keybd_event_(65,0,#KEYEVENTF_KEYUP,0)
While ChannelNumber<>State
keybd_event_(65,0,0,0)
keybd_event_(65,0,#KEYEVENTF_KEYUP,0)
keybd_event_(32,0,0,0)
keybd_event_(32,0,#KEYEVENTF_KEYUP,0)
Delay(1)
ASL_MixerGetRecordChannel(0,@ChannelNumber)
Wend
Kill_Prozess_by_Name("SNDVOL32.EXE")
EndIf
EndProcedure
SetMixerTo(1)
Code: Alles auswählen
Procedure ASL_MixerGetRecordChannel(mixerID,*ChannelNumber)
Structure MIXERCONTROL
cbStruct.l
dwControlID.l
dwControlType.l
fdwControl.l
cMultipleItems.l
szShortName.b[#MIXER_SHORT_NAME_CHARS]
szName.b[#MIXER_LONG_NAME_CHARS]
lMinimum.l
lMaximum.l
dwMinimum.l
dwMaximum.l
Reserved.l[6]
cSteps.l
cbCustomData.l
dwReserved.l[6]
EndStructure
mxl.MIXERLINE
mxl\cbStruct=SizeOf(MIXERLINE)
mxl\dwComponentType=#MIXERLINE_COMPONENTTYPE_DST_WAVEIN
Result=mixerGetLineInfo_(mixerID,mxl,#MIXER_GETLINEINFOF_COMPONENTTYPE)
mxlctrls.MIXERLINECONTROLS
mxlctrls\cbStruct=SizeOf(MIXERLINECONTROLS)
mxlctrls\dwLineID=mxl\dwLineID
mxlctrls\cControls=mxl\cControls
mxlctrls\dwControlType=#MIXERCONTROL_CONTROLTYPE_MUX
mxlctrls\cbmxctrl=SizeOf(MIXERCONTROL)
Bytes=(SizeOf(MIXERCONTROL)* mxlctrls\cControls)
*control=AllocateMemory(Bytes)
mxlctrls\pamxctrl=*control
Result=mixerGetLineControls_(mixerID,mxlctrls,#MIXER_GETLINECONTROLSF_ONEBYTYPE)
CopyMemory(*Control,ctrl.Mixercontrol,SizeOf(Mixercontrol))
For i=0 To mxl\cControls-1
CopyMemory(*Control+(i*SizeOf(Mixercontrol)),ctrl.Mixercontrol,SizeOf(Mixercontrol))
Next
If ctrl\dwControlType=#MIXERCONTROL_CONTROLTYPE_MUX
mcd.MIXERCONTROLDETAILS
mcd\cbStruct = SizeOf(MIXERCONTROLDETAILS)
mcd\cChannels=1
PokeL(mcd+12,ctrl\cMultipleItems)
mcd\cbDetails = SizeOf(MIXERCONTROLDETAILS_BOOLEAN)
*lv=AllocateMemory(mcd\cChannels*ctrl\cMultipleItems*mcd\cbDetails)
mcd\paDetails=*lv
Result=mixerGetControlDetails_(mixer,mcd,#MIXER_GETCONTROLDETAILSF_VALUE)
For i=0 To ctrl\cMultipleItems-1
If PeekL(*lv+i*4)=1
NumberSelect=i
EndIf
Next
NameSelect.s=s$
PokeL(*ChannelNumber,NumberSelect)
ProcedureReturn #True
EndIf
ProcedureReturn #False
EndProcedure
Procedure ASL_MixerSetRecordChannel(mixerID,State)
mxl.MIXERLINE
mxl\cbStruct=SizeOf(MIXERLINE)
mxl\dwComponentType=#MIXERLINE_COMPONENTTYPE_DST_WAVEIN
Result=mixerGetLineInfo_(mixerID,mxl,#MIXER_GETLINEINFOF_COMPONENTTYPE)
mxlctrls.MIXERLINECONTROLS
mxlctrls\cbStruct=SizeOf(MIXERLINECONTROLS)
mxlctrls\dwLineID=mxl\dwLineID
mxlctrls\cControls=mxl\cControls
mxlctrls\dwControlType=#MIXERCONTROL_CONTROLTYPE_MUX
mxlctrls\cbmxctrl=SizeOf(MIXERCONTROL)
Bytes=(SizeOf(MIXERCONTROL)* mxlctrls\cControls)
*control=AllocateMemory(Bytes)
mxlctrls\pamxctrl=*control
Result=mixerGetLineControls_(mixerID,mxlctrls,#MIXER_GETLINECONTROLSF_ONEBYTYPE)
CopyMemory(*Control,ctrl.Mixercontrol,SizeOf(Mixercontrol))
For i=0 To mxl\cControls-1
CopyMemory(*Control+(i*SizeOf(Mixercontrol)),ctrl.Mixercontrol,SizeOf(Mixercontrol))
Next
If ctrl\dwControlType=#MIXERCONTROL_CONTROLTYPE_MUX
mcd.MIXERCONTROLDETAILS
mcd\cbStruct=SizeOf(MIXERCONTROLDETAILS)
mcd\cChannels=1
PokeL(mcd+12,ctrl\cMultipleItems)
mcd\cbDetails=SizeOf(MIXERCONTROLDETAILS_BOOLEAN)
*lv=AllocateMemory(mcd\cChannels*ctrl\cMultipleItems*mcd\cbDetails)
PokeL(*lv+State*4,1)
mcd\paDetails=*lv
Result=mixerSetControlDetails_(mixerID,mcd,#MIXER_SETCONTROLDETAILSF_VALUE)
ProcedureReturn #True
EndIf
ProcedureReturn #False
EndProcedure
ASL_MixerSetRecordChannel(0,3)
RunProgram("sndvol32","/record","",#PB_Program_Wait)
ASL_MixerGetRecordChannel(0,@ChannelNumber)
Debug ChannelNumber