Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi [Windows 98 SE] Gerät deaktivieren (https://www.delphipraxis.net/104913-%5Bwindows-98-se%5D-geraet-deaktivieren.html)

FAlter 12. Dez 2007 18:46


[Windows 98 SE] Gerät deaktivieren
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,

weiß jemand, wie ich inter Windows 98 ein Gerät deaktivieren und wieder aktivieren kann? Wie es per Geräte-Manager geht, siehe Anhang, aber per eigenes Programm?

Mfg
FAlter

bitsetter 12. Dez 2007 23:02

Re: [Windows 98 SE] Gerät deaktivieren
 
Hi,

das müsste mit der Funktion "CM_Disable_DevNode" aus der CFGMGR32.dll gehen. Die Funktion ist auch in der CFGMGR32.dll unter Windows 98 SE vorhanden.

FAlter 13. Dez 2007 09:56

Re: [Windows 98 SE] Gerät deaktivieren
 
Hi,

Danke erstmal für den Tipp, aber das MSDN hilft da nicht :(
http://msdn2.microsoft.com/en-gb/library/ms790837.aspx
Zitat:

CM_Disable_Devnode

Do not use this function. Use device installation functions instead.
Und diese "device installation functions" sind teilweise erst ab Vista da. Also nicht unter Win98SE. Tja, Win98 ist selbst obsolete :(

Was ich zu CM_Disable_DevNode finden konnte:
http://www.webtropy.com/articles/dll/h/cfgmgr32.h
Code:
//
// Standardized Return Value data type
//
typedef DWORD       RETURN_TYPE;
typedef RETURN_TYPE CONFIGRET;

//
// Device Instance Handle data type
//
typedef DWORD      DEVNODE, DEVINST;
typedef DEVNODE   *PDEVNODE, *PDEVINST;
...
CMAPI
CONFIGRET
WINAPI
CM_Enable_DevNode(
             IN DEVINST dnDevInst,
             IN ULONG   ulFlags
             );
...
CMAPI
CONFIGRET
WINAPI
CM_Disable_DevNode(
             IN DEVINST dnDevInst,
             IN ULONG   ulFlags
             );
Delphi-Quellcode:
function CM_Disable_DevNode(dnDevInst: DWord; ulFlags: LongWord): DWord; stdcall;
external 'CFGMGR32';

function CM_Enable_DevNode(dnDevInst: DWord; ulFlags: LongWord): DWord; stdcall;
external 'CFGMGR32';
Bleibt die Frage, wie bekomme ich den ersten Parameter her, meinetwegen aus dem Gerätenamen, der angezeigt wird oder so.

Mfg
FAlter

bitsetter 13. Dez 2007 10:24

Re: [Windows 98 SE] Gerät deaktivieren
 
Hi,
Zitat:

Zitat von FAlter
Und diese "device installation functions" sind teilweise erst ab Vista da. Also nicht unter Win98SE. Tja, Win98 ist selbst obsolete :(

unter Windows XP habe ich die Funktion erfolgreich getestet und wie schon gesagt, die Funktionen sind auch in der CFGMGR32.dll unter Win 98 SE vorhanden, ich habe selber nachgesehen.

Zitat:

Zitat von FAlter
Bleibt die Frage, wie bekomme ich den ersten Parameter her, meinetwegen aus dem Gerätenamen, der angezeigt wird oder so.

Mit Hilfe der SetupApi.dll bin ich darangekommen, da ich auch Win 98 SE habe werde ich es heute nochmal selber versuchen, ob der Code auch unter Win 98 SE funktioniert. Für Delphi findest du die Funktionen übrigens hier
Ansonsten soll es auch mit Hilfe der Funktion CM_Locate_DevNodeA möglich sein DevInst zu bekommen.

bitsetter 14. Dez 2007 11:08

Re: [Windows 98 SE] Gerät deaktivieren
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von FAlter
Tja, Win98 ist selbst obsolete :(

Hallo,

die Funktionen CM_Disable_DevNode und CM_Enable_DevNode funktionieren auch unter Windows 98 SE, das habe ich jetzt getestet. Allerdings entsteht damit eine Einschränkung, man kann mit der Funktion CM_Enable_DevNode das Gerät wieder aktivieren, nicht jedoch über das Fenster "Eigenschaften", da dort der Button "Gerät aktivieren" dann nicht vorhanden ist. Dafür erscheint der Hinweis:
Zitat:

Das Gerät kann nicht aktiviert werden, da es von einem Windows-Treiber deaktiviert wurde.
(siehe Anhang)

FAlter 14. Dez 2007 17:06

Re: [Windows 98 SE] Gerät deaktivieren
 
Hi,

unter XP funktioniert sowas (übrigens auch, wenn ichs mit dem Compilerschalter für Win98SE compiliere :D ):

Delphi-Quellcode:
uses
  CfgMgr32;

...

var
  DN: DevNode;
  OK: Boolean;
begin
  OK := false;

  if LoadConfigManagerApi then
  try
    Screen.Cursor := crHourGlass;
    if CM_Locate_DevNode(DN, PChar(Edit1.Text), CM_LOCATE_DEVNODE_NORMAL) = CR_SUCCESS then
      if CM_Disable_DevNode(DN, 0) = CR_SUCCESS then
        OK := true;
  finally
    Screen.Cursor := crDefault;
    UnloadConfigManagerApi;
  end;

  if not OK then
    ShowMessage('Fehler!');
end;
Eingabe in der Form:
ROOT\<gerät>\<nummer>, siehe "Instanzkennung" unter Geräte-Manager :arrow: Eigenschaften :arrow: Details. Hoffentlich findet man das unter W98 auch so leicht. Werds gleich mal unter W98SE testen.

[edit]
Unter Win98 sieht der Gerätenamen ungefähr so aus:
USB\VID_0CF2&PID_6220\606569746801
Finden kann man ihn dort leider nicht so leicht; ich fand ihn unter HKEY_DYN_DATA\ConfigManager\Enum in der Registry - durch Suche nach "USB" uns ausprobieren, welches Gerät deaktiviert wird. Beim Nachmachen bitte vorsicht walten lassen. Das falsche Gerät zu deaktivieren kann vorhersehbare, aber schlimme Folgen haben.

Es funktioniert! Danke für die Hilfe.
[/edit]

Mfg
FAlter

sneumann 11. Okt 2011 07:31

AW: Re: [Windows 98 SE] Gerät deaktivieren
 
Zitat:

Zitat von FAlter (Beitrag 714403)
Hi,

unter XP funktioniert sowas (übrigens auch, wenn ichs mit dem Compilerschalter für Win98SE compiliere :D ):

Delphi-Quellcode:
uses
  CfgMgr32;

...

var
  DN: DevNode;
  OK: Boolean;
begin
  OK := false;

  if LoadConfigManagerApi then
  try
    Screen.Cursor := crHourGlass;
    if CM_Locate_DevNode(DN, PChar(Edit1.Text), CM_LOCATE_DEVNODE_NORMAL) = CR_SUCCESS then
      if CM_Disable_DevNode(DN, 0) = CR_SUCCESS then
        OK := true;
  finally
    Screen.Cursor := crDefault;
    UnloadConfigManagerApi;
  end;

  if not OK then
    ShowMessage('Fehler!');
end;
Eingabe in der Form:
ROOT\<gerät>\<nummer>, siehe "Instanzkennung" unter Geräte-Manager :arrow: Eigenschaften :arrow: Details. Hoffentlich findet man das unter W98 auch so leicht. Werds gleich mal unter W98SE testen.

[edit]
Unter Win98 sieht der Gerätenamen ungefähr so aus:
USB\VID_0CF2&PID_6220\606569746801
Finden kann man ihn dort leider nicht so leicht; ich fand ihn unter HKEY_DYN_DATA\ConfigManager\Enum in der Registry - durch Suche nach "USB" uns ausprobieren, welches Gerät deaktiviert wird. Beim Nachmachen bitte vorsicht walten lassen. Das falsche Gerät zu deaktivieren kann vorhersehbare, aber schlimme Folgen haben.

Es funktioniert! Danke für die Hilfe.
[/edit]

Mfg
FAlter


muss ich jetzt oben die funktionsdeklaration auch benutzen oder funktioniert der untere Code einfach so wenn ich ihn rein kopier?
wo muss ich meinen USB\VID_090C&PID_1000\LFBMMTURIAEMUNL3 einfügen? bei mir sagt er wenn ich kompiliere unsicherer Typ Pchar und [Fehler] : Undefinierter Bezeichner: 'Edit1'.
wenn ich es deaktiviert habe wie aktivier ich es dann wieder?

DeddyH 11. Okt 2011 07:43

AW: Re: [Windows 98 SE] Gerät deaktivieren
 
Zitat:

Zitat von sneumann (Beitrag 1129699)
wenn ich es deaktiviert habe wie aktivier ich es dann wieder?

Wenn die Funktion zum Deaktivieren CM_Disable_DevNode heißt, wie könnte dann die zum Aktivieren heißen (abgesehen davon, dass sie weiter oben sogar bereits genannt wird)?

SirThornberry 11. Okt 2011 12:22

AW: [Windows 98 SE] Gerät deaktivieren
 
@sneumann: Wenn du direkt auf einen Beitrag antwortest ist es nicht notwendig (auch nicht gewünscht) das du den kompletten vorangegangenen Beitrag zitierst. Wenn du auf einzelne Passagen eingehen willst das natürlich kein Problem. Aber den kompletten vorangegangenen Beitrag zu zitieren macht das ganze nur unnötige unübersichtlich. Bitte zukünftig versuchen zu vermeiden. :)

p80286 11. Okt 2011 13:22

AW: Re: [Windows 98 SE] Gerät deaktivieren
 
Zitat:

Zitat von sneumann (Beitrag 1129699)
muss ich jetzt oben die funktionsdeklaration auch benutzen oder funktioniert der untere Code einfach so wenn ich ihn rein kopier?
wo muss ich meinen USB\VID_090C&PID_1000\LFBMMTURIAEMUNL3 einfügen? bei mir sagt er wenn ich kompiliere unsicherer Typ Pchar und [Fehler] : Undefinierter Bezeichner: 'Edit1'.

was bitte ist "oben" und was ist "unten"?
Wenn Du etwas "rein kopierst" wird wahrscheinlich nichts funktionieren.
Wenn Dir "Edit1" fehlt, dann könntest Du
a)Edit1 entfernen,
b)Edit1 anlegen,
c)einen Ersatz für Edit1 anlegen.

Übrigens Bei Google suchencm_locate_devnode hilft Dir vielleicht auch etwas weiter.

Gruß
K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:12 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz