Discussion:
Aktueller Ressourcen-Editor?
(zu alt für eine Antwort)
Edzard Egberts
2014-12-17 08:54:20 UTC
Permalink
Mein Ressourcen-Editor (BC 5.0 von 1995) ist wahrscheinlich nicht mehr
ganz aktuell, denn beim Rechtsklick auf eine Programmdatei werden unter
Win7 in den Eigenschaften kaum noch Einträge angezeigt, die über die
Programmversion hinaus gehen. Ich brauche da die Produktinfos,
Programmversion und das Icon.

Mit welcher Software sollte ich also die Ressourcen bearbeiten und wo
bekomme ich ein Beispiel der Ressource für die Produktinfos?


Liegt das eigentlich auch an den Ressourcen:

"Programmkompatibilitätsassistent - Dieses Programm wurde eventuell
nicht richtig installiert." - laut Hilfe wird das nur für "ältere
Programme" angezeigt. Wie bringe ich Windows 7 bei, dass meine frisch
compilierte Software kein "älteres Programm" ist? Im C++-Standard bin
ich garantiert kompatibler als Microsoft! ;o)

"Benutzerkontensteuerung - Möchten Sie zulassen, dass durch das folgende
Programm von einem unbekannten Herausgeber Änderungen an diesem Computer
vorgenommen werden":

Kann ich mit einem aktuellen Ressourcen-Editor den "Herausgeber:
*Unbekannt*" auf "Herausgeber: *Ed*" ändern, oder wo sonst kommt das her?


Noch eine ganz andere Frage: Zum Mitlesen taugt diese Gruppe mangels
Traffic ja nicht so sehr, gibt es ein empfehlenswertes Forum in dem noch
etwas anderes als .NET vorkommt? Ich kann mit dem ganzen Visual-Zeugs
nichts anfangen, gibt es sonst noch Leute, die mit MinGW und der Win-API
programmieren? Es wäre vielleicht doch ganz nützlich, wenn ich
gelegentlich einen Blick auf den aktuellen Stand der Dinge werfen kann. ;o)
Stefan Kanthak
2014-12-17 20:34:04 UTC
Permalink
Post by Edzard Egberts
Mein Ressourcen-Editor (BC 5.0 von 1995)
"Schuster, bleib bei Deinen Leisten"

Besorg Dir ANSTAENDIGES Werkzeug!
Post by Edzard Egberts
ist wahrscheinlich nicht mehr ganz aktuell, denn beim Rechtsklick
auf eine Programmdatei werden unter Win7 in den Eigenschaften kaum
noch Einträge angezeigt, die über die Programmversion hinaus gehen.
Ich brauche da die Produktinfos, Programmversion und das Icon.
Mit welcher Software sollte ich also die Ressourcen bearbeiten
NICHT bearbeiten, sondern beim Erzeugen der Software generieren.
Schreib Dir *.RC und erzeuge daraus mit dem kostenlosen Microsoft
Resource-Compiler (den findest Du in JEDEM Platform oder Windows
SDK) *.RES.
In den *.RC referenzierst Du das Icon und das Manifest.
Fuer Meldungen gibt's analog *.MC und den Message-Compiler; dessen
Ausgabe braucht RC.EXE als Eingabe.
Die *.RES linkst Du mit Deinem *.O[BJ] zur *.EXE/*.DLL

Meine Makefiles erzeugen *.Manifest und "VERSION"-Ressource per
"here"-Dokument:

--- $NAME.MAK ---
# Copyright (C) 2004-2014, Stefan Kanthak <***@nexgo.de>

TSA = http://timestamp.verisign.com/scripts/timstamp.dll # VeriSign SHA1
...

all: $(NAME).EXE
SIGNTOOL.EXE Sign /A /D "$(DESCRIPTION)" /DU $(URL) /N "$(CERTIFICATE)" /T $(TSA) /V $(NAME).EXE

$(NAME).EXE: $(NAME).OBJ $(NAME).RES
LINK.EXE /NXCOMPAT /OPT:REF /RELEASE /SUBSYSTEM:WINDOWS,5.0 /VERSION:1.0 $(NAME).OBJ $(NAME).RES

$(NAME).OBJ: $(NAME).C $(NAME).H
CL.EXE /c /GA /GF $(NAME).C

$(NAME).RES: $(NAME).TMP $(NAME).RC $(NAME).ICO $(NAME).MAN $(NAME)_ENU.BIN $(NAME)_GER.BIN
RC.EXE /N /R /V $(NAME).TMP

$(NAME).H $(NAME).RC $(NAME)_ENU.BIN $(NAME)_GER.BIN: $(NAME).MC
MC.EXE -b -c -n -v $(NAME).MC

$(NAME).TMP: $(NAME).MAK
Rem <<$(NAME).TMP
// Copyright (C) 2004-2014, Stefan Kanthak <***@nexgo.de>

#define WIN32_LEAN_AND_MEAN

#define WINVER 0x0500
#define _WIN32_WINNT 0x0500

#define UNICODE
#define _UNICODE

#include <winresrc.h>
#include <winuser.h>
#include <winver.h>

#include "$(NAME).RC"

#ifdef _WIN32
#pragma code_page(1252)
#endif

LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL
...

LANGUAGE LANG_ENGLISH, SUBLANG_NEUTRAL
...

LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL

1 ICON "$(NAME).ICO"

CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "$(NAME).MAN"

VERSION 0x20141217L

VS_VERSION_INFO VERSIONINFO
#ifdef _DEBUG
FILEFLAGS VS_FF_DEBUG
#else
FILEFLAGS 0
#endif
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
FILEOS VOS_NT_WINDOWS32
FILETYPE VFT_APP
FILESUBTYPE VFT2_UNKNOWN
FILEVERSION 0,8,1,5
PRODUCTVERSION 0,8,1,5
BEGIN
BLOCK "StringFileInfo"
BEGIN
#ifdef _UNICODE
BLOCK "040004B0"
#else
BLOCK "040004E4"
#endif
BEGIN
VALUE "Comments", "...\r\n"
"...\r\n"
"...\0"
VALUE "CompanyName", "$(COMPANY)\0"
VALUE "FileDescription", "$(DESCRIPTION)\0"
VALUE "FileVersion", "0.8.1.5\0"
VALUE "InternalName", "$(NAME)\0"
VALUE "LegalCopyright", "Copyright © 2004-2014, Stefan Kanthak\0"
VALUE "LegalTrademarks", "\0"
// VALUE "OLESelfRegister", "\0"
VALUE "OriginalFilename", "$(NAME).EXE\0"
// VALUE "PrivateBuild", "\0"
VALUE "ProductName", "$(PRODUCT)\0"
VALUE "ProductVersion", "0.8\0"
VALUE "SpecialBuild", "Release\0"
END
// weitere Sprachen
...
END
BLOCK "VarFileInfo"
BEGIN
#ifdef _UNICODE
VALUE "Translation", 0x0400, 1200, ...
#else
VALUE "Translation", 0x0400, 1252, ...
#endif
END
END
<<KEEP

$(NAME).MAN: $(NAME).MAK
Rem <<$(NAME).MAN
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!-- Copyright (C) 2004-2014, Stefan Kanthak -->
<assembly
xmlns="urn:schemas-microsoft-com:asm.v1"
manifestVersion="1.0">
<assemblyIdentity
name="$(COMPANY).Tools.$(PRODUCT)"
processorArchitecture="*"
type="win32"
version="0.8.1.5" />
<compatibility
xmlns="urn:schemas-microsoft-com:compatibility.v1">
...
<dependency>
...
<description>$(DESCRIPTION)</description>
<trustInfo
xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges
xmlns="urn:schemas-microsoft-com:asm.v3">
<requestedExecutionLevel
level="asInvoker"
uiAccess="false" />
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
<<KEEP

--- EOF ---
Post by Edzard Egberts
und wo bekomme ich ein Beispiel der Ressource für die Produktinfos?
Siehe oben, oder MSDN: "VERSION" Ressource.
Post by Edzard Egberts
"Programmkompatibilitätsassistent - Dieses Programm wurde eventuell
nicht richtig installiert." - laut Hilfe wird das nur für "ältere
Programme" angezeigt.
Verwendest Du die MSVCRT.DLL?
Selbst schuld, die ist seit Jahren NUR fuer die interne Nutzung durch
Microsoft freigegeben!
Post by Edzard Egberts
Wie bringe ich Windows 7 bei, dass meine frisch
compilierte Software kein "älteres Programm" ist?
Indem Du keine veralteten Schnittstellen des Win32API aufrufst, oder
sie nicht mit falschen/veralteten Versionen der Argumente aufrufst.
Post by Edzard Egberts
Im C++-Standard bin ich garantiert kompatibler als Microsoft! ;o)
Der Fisch stinkt vom Kopf her!
Post by Edzard Egberts
"Benutzerkontensteuerung - Möchten Sie zulassen, dass durch das folgende
Programm von einem unbekannten Herausgeber Änderungen an diesem Computer
Du rufst Schnittstellen des Win32API auf, die privilegierte Aktionen
ausfuehren koennen/sollen.
Sag Windows per (als Ressource ins Programm eingebundenes) Manifest,
dass das Programm unprivilegiert ablaufen soll.
Post by Edzard Egberts
*Unbekannt*" auf "Herausgeber: *Ed*" ändern,
Nein.
Post by Edzard Egberts
oder wo sonst kommt das her?
Von der fehlenden Authenticode-Signatur!

Stefan
[
--
Die unaufgeforderte Zusendung werbender E-Mails verstoesst gegen §823
Abs. 1 sowie §1004 Abs. 1 BGB und begruendet Anspruch auf Unterlassung.
Beschluss des OLG Bamberg vom 12.05.2005 (AZ: 1 U 143/04)


--- news://freenews.netfront.net/ - complaints: ***@netfront.net ---
Edzard Egberts
2014-12-18 10:33:31 UTC
Permalink
Post by Stefan Kanthak
Post by Edzard Egberts
Mein Ressourcen-Editor (BC 5.0 von 1995)
Besorg Dir ANSTAENDIGES Werkzeug!
So vor fünf Jahren habe ich zuletzt danach gesucht, da hat diese
Uralt-Software noch die Alternativen geschlagen und kostenlos von
Microsoft gab es AFAIK nur den Compiler. Da muss ich mir also erst
einmal das SDK angucken...
Post by Stefan Kanthak
Post by Edzard Egberts
Mit welcher Software sollte ich also die Ressourcen bearbeiten
NICHT bearbeiten, sondern beim Erzeugen der Software generieren.
Schreib Dir *.RC und erzeuge daraus mit dem kostenlosen Microsoft
Resource-Compiler (den findest Du in JEDEM Platform oder Windows SDK)
*.RES.
Seltsam, ich habe *.RES-Dateien, die bearbeite ich mit dem BC und mit
"windres" erzeuge ich daraus eine statische Bibliothek zum Linken.
Post by Stefan Kanthak
#include <winresrc.h> #include <winuser.h> #include <winver.h>
#include "$(NAME).RC"
#ifdef _WIN32 #pragma code_page(1252) #endif
LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL
Das ist aber doch kein C++? Irgend eine Makrodefinition?
Post by Stefan Kanthak
VALUE "CompanyName", "$(COMPANY)\0"
VALUE "FileDescription", "$(DESCRIPTION)\0"
VALUE "FileVersion", "0.8.1.5\0"
VALUE "InternalName", "$(NAME)\0"
VALUE "LegalCopyright", "Copyright © 2004-2014, Stefan Kanthak\0"
VALUE "LegalTrademarks", "\0"
// VALUE "OLESelfRegister", "\0"
VALUE "OriginalFilename", "$(NAME).EXE\0"
// VALUE "PrivateBuild", "\0"
VALUE "ProductName", "$(PRODUCT)\0"
VALUE "ProductVersion", "0.8\0"
VALUE "SpecialBuild", "Release\0"
Seltsam, meine RES sieht fast genau so aus, trotzdem wird in
Eigenschaften -> Details nur die Dateiversion angezeigt und nicht
Produktname, Produktversion und Copyright. Ich vermute, das liegt an der
Sprache, die wird nämlich auch nicht angezeigt und Deine
Language-Einträge (z.B. LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL) kriege
ich nicht in die Ressource - der Compiler sagt da immer "BEGIN expected".

Lässt sich jetzt schlecht sagen, ob das an einfacher Unfähigkeit
meinerseits liegt und bloß anders formuliert werden muss, oder
tatsächlich ein Problem der alten Software ist. An der Software kann es
eigentlich nicht liegen, die funktioniert ja seit fast 20 Jahren. ;o)
Post by Stefan Kanthak
Post by Edzard Egberts
und wo bekomme ich ein Beispiel der Ressource für die
Produktinfos?
Siehe oben, oder MSDN: "VERSION" Ressource.
Ich sehe schon, dass muss ich mir noch einmal von Grund auf neu
angucken, wenn ich schon das *.RC nicht mehr kenne. Da war mal was...
Post by Stefan Kanthak
Post by Edzard Egberts
"Programmkompatibilitätsassistent - Dieses Programm wurde
eventuell nicht richtig installiert." - laut Hilfe wird das nur für
"ältere Programme" angezeigt.
Verwendest Du die MSVCRT.DLL?
Nein, MinGW (die aktuelle Version) und libgcc sowie libstdc++ werden
statisch gelinkt.
Post by Stefan Kanthak
Selbst schuld, die ist seit Jahren NUR fuer die interne Nutzung
durch Microsoft freigegeben!
Ist die nicht für Visual-C++ und muss ständig als "Redistributable"
installiert werden (z.B. für Treiber)?
Post by Stefan Kanthak
Post by Edzard Egberts
Wie bringe ich Windows 7 bei, dass meine frisch compilierte
Software kein "älteres Programm" ist?
Indem Du keine veralteten Schnittstellen des Win32API aufrufst, oder
sie nicht mit falschen/veralteten Versionen der Argumente aufrufst.
Das wird dann wohl nichts, da MinGW viele neue Sachen nicht anbietet.

Aktualisierte Argumente wären sicher toll, dann spart man sich so etwas:

string SID= "S-1-5-32-545";
ConvertStringSidToSidA(const_cast< char* >(SID.c_str()), &psid);
Post by Stefan Kanthak
Post by Edzard Egberts
"Benutzerkontensteuerung - Möchten Sie zulassen, dass durch das
folgende Programm von einem unbekannten Herausgeber Änderungen an
Du rufst Schnittstellen des Win32API auf, die privilegierte Aktionen
ausfuehren koennen/sollen. Sag Windows per (als Ressource ins
Programm eingebundenes) Manifest, dass das Programm unprivilegiert
ablaufen soll.
Okay, "Manifest", "Authenticode-Signatur", da melde ich mich vielleicht
noch mal, wenn ich das alles nachgelesen habe. Die Information, dass das
Programm über die API-Aufrufe sortiert wird, ist jedenfalls interessant,
das hätte ich nicht gedacht.

Dass sich ein Programm Windows gegenüber richtig präsentiert, macht so
langsam fast mehr Mühe, als die eigentliche Funktionalität zu schreiben. ;o)
Stefan Kanthak
2014-12-18 11:25:35 UTC
Permalink
Post by Edzard Egberts
Post by Stefan Kanthak
Post by Edzard Egberts
Mein Ressourcen-Editor (BC 5.0 von 1995)
Besorg Dir ANSTAENDIGES Werkzeug!
So vor fünf Jahren habe ich zuletzt danach gesucht, da hat diese
Uralt-Software noch die Alternativen geschlagen und kostenlos von
Microsoft gab es AFAIK nur den Compiler. Da muss ich mir also erst
einmal das SDK angucken...
Post by Stefan Kanthak
Post by Edzard Egberts
Mit welcher Software sollte ich also die Ressourcen bearbeiten
NICHT bearbeiten, sondern beim Erzeugen der Software generieren.
Schreib Dir *.RC und erzeuge daraus mit dem kostenlosen Microsoft
Resource-Compiler (den findest Du in JEDEM Platform oder Windows SDK)
*.RES.
Seltsam, ich habe *.RES-Dateien, die bearbeite ich mit dem BC und mit
"windres" erzeuge ich daraus eine statische Bibliothek zum Linken.
Einer von beiden oder beide kann ganz offensichtlich nicht die von
Windows erwarteten Ressourcen erzeugen.
Mit dem 8 Jahre alten Platform SDK for Windows Server 2003 R2
erzeugte Programme und DLLs zeigen die bei Dir auftretenden Macken
Post by Edzard Egberts
Post by Stefan Kanthak
#include <winresrc.h> #include <winuser.h> #include <winver.h>
#include "$(NAME).RC"
#ifdef _WIN32 #pragma code_page(1252) #endif
LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL
Das ist aber doch kein C++? Irgend eine Makrodefinition?
Nein, eine RC-Datei.
Ich trenne die Meta-Informationen fuer Windows von den eigentlichen,
vom Programm benutzten Ressourcen.

[...]
Post by Edzard Egberts
Post by Stefan Kanthak
Verwendest Du die MSVCRT.DLL?
Nein, MinGW (die aktuelle Version) und libgcc sowie libstdc++ werden
statisch gelinkt.
Post by Stefan Kanthak
Selbst schuld, die ist seit Jahren NUR fuer die interne Nutzung
durch Microsoft freigegeben!
Ist die nicht für Visual-C++ und muss ständig als "Redistributable"
installiert werden (z.B. für Treiber)?
MSCVRT.DLL WAR (mit Betonung auf WAR) fuer Visual C (ohne ++) 6.0.
Sie ist seit LANGER Zeit eine Windows-Komponente und nicht mehr fuer
Programme von Dritt-Anbietern freigegeben.

Neuere "MSVCRT.DLL" tragen Versionsnummern in den Dateinamen:
VC 2002: MSVCR70.DLL (plus MSVCP70.DLL fuer C++)
VC 2003: MSVCR71.DLL (plus MSVCP71.DLL fuer C++)
VC 2005: MSVCR80.DLL (plus MSVCP80.DLL fuer C++)
VC 2008: MSVCR90.DLL (plus MSVCP90.DLL fuer C++)
VC 2010: MSVCR100.DLL (plus MSVCP100.DLL fuer C++)
VC 2012: MSVCR110.DLL (plus MSVCP110.DLL fuer C++)
VC 2013: MSVCR120.DLL (plus MSVCP120.DLL fuer C++)
...

Siehe dazu <https://support.microsoft.com/kb/2019667>; zu "staendig"
siehe <https://technet.microsoft.com/library/security/ms11-025>

JFTR: Treiber laufen im Kernel-Modus, die koennen keine DLLs verwenden.

JFTR: "richtige" Windows-Programme brauchen keine MSVCRT, die rufen
nur das Win32-API auf.-P
Post by Edzard Egberts
Post by Stefan Kanthak
Post by Edzard Egberts
Wie bringe ich Windows 7 bei, dass meine frisch compilierte
Software kein "älteres Programm" ist?
Indem Du keine veralteten Schnittstellen des Win32API aufrufst, oder
sie nicht mit falschen/veralteten Versionen der Argumente aufrufst.
Das wird dann wohl nichts, da MinGW viele neue Sachen nicht anbietet.
string SID= "S-1-5-32-545";
ConvertStringSidToSidA(const_cast< char* >(SID.c_str()), &psid);
Du solltest auf UNICODE umstellen!
Der Support fuer die nur ANSI unterstuetzenden Wintendos wurde vor
VIELEN Jahren eingestellt!

[...]

Stefan
[
--
Die unaufgeforderte Zusendung werbender E-Mails verstoesst gegen §823
Abs. 1 sowie §1004 Abs. 1 BGB und begruendet Anspruch auf Unterlassung.
Beschluss des OLG Bamberg vom 12.05.2005 (AZ: 1 U 143/04)


--- news://freenews.netfront.net/ - complaints: ***@netfront.net ---
Edzard Egberts
2014-12-18 12:50:55 UTC
Permalink
Post by Stefan Kanthak
Post by Edzard Egberts
Post by Stefan Kanthak
#include <winresrc.h> #include <winuser.h> #include <winver.h>
#include "$(NAME).RC"
#ifdef _WIN32 #pragma code_page(1252) #endif
LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL
Das ist aber doch kein C++? Irgend eine Makrodefinition?
Nein, eine RC-Datei.
Also muss ich das anders herum sehen - der Ressource-Compiler versteht
die Funktionen in den Includes? Kommt mir irgendwie durcheinander vor,
aber wie schon gesagt, muss ich mir von Grund auf ansehen.
Post by Stefan Kanthak
VC 2002: MSVCR70.DLL (plus MSVCP70.DLL fuer C++)
VC 2003: MSVCR71.DLL (plus MSVCP71.DLL fuer C++)
Ja, habe ich schon gesehen, brauche ich normalerweise nicht.
Post by Stefan Kanthak
JFTR: Treiber laufen im Kernel-Modus, die koennen keine DLLs verwenden.
Damit man eine C-Schnittstelle erhält, muss der OceanOptics OmniDriver
eine bestimmte Java-Version und ein VC-Redistributable installieren.

Vorgestern noch gemacht (beim Test des Installers) und wenn es unbedingt
sein muss, suche ich Dir noch die Beschreibung im Programmers-Manual
heraus. Aber darüber haben wir uns schon einmal unterhalten, das ist die
Software, die unter Win7 32bit dauernd Exceptions wirft.

Ich denke mir, dass es Programmierer gibt, die noch weniger Ahnung
haben, als ich! :o)
Post by Stefan Kanthak
Post by Edzard Egberts
string SID= "S-1-5-32-545";
ConvertStringSidToSidA(const_cast< char* >(SID.c_str()), &psid);
Du solltest auf UNICODE umstellen!
Eclipse und FLTK laufen mit Utf8 und den angegebenen String halte ich
eindeutig für ANSI. UNNICODE ist doch irgendetwas Seltsames von MS, das
brauche ich nicht. ;o)
Stefan Kanthak
2014-12-18 13:24:48 UTC
Permalink
Post by Edzard Egberts
Post by Stefan Kanthak
Post by Edzard Egberts
Post by Stefan Kanthak
#include <winresrc.h> #include <winuser.h> #include <winver.h>
#include "$(NAME).RC"
#ifdef _WIN32 #pragma code_page(1252) #endif
LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL
Das ist aber doch kein C++? Irgend eine Makrodefinition?
Nein, eine RC-Datei.
Also muss ich das anders herum sehen - der Ressource-Compiler versteht
die Funktionen in den Includes?
Wie kommst Du auf dieses duenne Brett?
RC.EXE nutzt den C-Praeprocessor, und der versteht #define etc.
Post by Edzard Egberts
Kommt mir irgendwie durcheinander vor,
aber wie schon gesagt, muss ich mir von Grund auf ansehen.
[...]
Post by Edzard Egberts
Post by Stefan Kanthak
JFTR: Treiber laufen im Kernel-Modus, die koennen keine DLLs verwenden.
Damit man eine C-Schnittstelle erhält, muss der OceanOptics OmniDriver
eine bestimmte Java-Version und ein VC-Redistributable installieren.
Mit dem Treiber kommunizierst Du per IO_CTL.
Dummerweise gibt's Vollidioten, die solche Schnittstellen unter grossen
Haufen dampfenden und stinkenden Mists verstecken.
Post by Edzard Egberts
Vorgestern noch gemacht (beim Test des Installers) und wenn es unbedingt
sein muss, suche ich Dir noch die Beschreibung im Programmers-Manual
heraus. Aber darüber haben wir uns schon einmal unterhalten, das ist die
Software, die unter Win7 32bit dauernd Exceptions wirft.
Sag ich doch: dampfender stinkender Mist.
Post by Edzard Egberts
Ich denke mir, dass es Programmierer gibt, die noch weniger Ahnung
haben, als ich! :o)
Schlimmer geht immer!
Post by Edzard Egberts
Post by Stefan Kanthak
Post by Edzard Egberts
string SID= "S-1-5-32-545";
ConvertStringSidToSidA(const_cast< char* >(SID.c_str()), &psid);
Du solltest auf UNICODE umstellen!
Eclipse und FLTK laufen mit Utf8
Fuer Deine abartigen Vorlieben kann ich nix.-P
Post by Edzard Egberts
und den angegebenen String halte ich eindeutig für ANSI.
Dummerweise muss der vor der Uebergabe an den Windows-Kernel in UTF-16LE
uebersetzt werden.
Post by Edzard Egberts
UNNICODE ist doch irgendetwas Seltsames von MS, das brauche ich nicht. ;o)
Ach? "Utf8" ist kein UNICODE?

Stefan
[
--
Die unaufgeforderte Zusendung werbender E-Mails verstoesst gegen §823
Abs. 1 sowie §1004 Abs. 1 BGB und begruendet Anspruch auf Unterlassung.
Beschluss des OLG Bamberg vom 12.05.2005 (AZ: 1 U 143/04)


--- news://freenews.netfront.net/ - complaints: ***@netfront.net ---
Edzard Egberts
2014-12-18 14:26:21 UTC
Permalink
Post by Stefan Kanthak
Post by Edzard Egberts
Post by Stefan Kanthak
JFTR: Treiber laufen im Kernel-Modus, die koennen keine DLLs verwenden.
Damit man eine C-Schnittstelle erhält, muss der OceanOptics OmniDriver
eine bestimmte Java-Version und ein VC-Redistributable installieren.
Mit dem Treiber kommunizierst Du per IO_CTL.
Dummerweise gibt's Vollidioten, die solche Schnittstellen unter grossen
Haufen dampfenden und stinkenden Mists verstecken.
<>
Post by Stefan Kanthak
Sag ich doch: dampfender stinkender Mist.
Hehe, im Chor! Du ahnst gar nicht, was mir das Ding schon auf die Nerven
gegangen ist. :o(
Post by Stefan Kanthak
Post by Edzard Egberts
Post by Stefan Kanthak
Du solltest auf UNICODE umstellen!
Eclipse und FLTK laufen mit Utf8
Fuer Deine abartigen Vorlieben kann ich nix.-P
So etwas nennt sich "Alleinstellungsmerkmal"! ;o)
Post by Stefan Kanthak
Post by Edzard Egberts
UNNICODE ist doch irgendetwas Seltsames von MS, das brauche ich nicht. ;o)
Ach? "Utf8" ist kein UNICODE?
Utf8 ist Unicode. UNICODE sieht mir irgendwie microsoftig aus, so etwas
wie HANDLE, DWORD, etc. ;o)
Stefan Kanthak
2014-12-18 14:41:40 UTC
Permalink
Post by Edzard Egberts
Post by Stefan Kanthak
Post by Edzard Egberts
Post by Stefan Kanthak
Du solltest auf UNICODE umstellen!
Eclipse und FLTK laufen mit Utf8
Fuer Deine abartigen Vorlieben kann ich nix.-P
So etwas nennt sich "Alleinstellungsmerkmal"! ;o)
Raucherecke!
Post by Edzard Egberts
Post by Stefan Kanthak
Post by Edzard Egberts
UNNICODE ist doch irgendetwas Seltsames von MS, das brauche ich nicht. ;o)
Ach? "Utf8" ist kein UNICODE?
Utf8 ist Unicode. UNICODE sieht mir irgendwie microsoftig aus, so etwas
wie HANDLE, DWORD, etc. ;o)
#define UNICODE ist C.-P

Stefan
[
--
Die unaufgeforderte Zusendung werbender E-Mails verstoesst gegen §823
Abs. 1 sowie §1004 Abs. 1 BGB und begruendet Anspruch auf Unterlassung.
Beschluss des OLG Bamberg vom 12.05.2005 (AZ: 1 U 143/04)


--- news://freenews.netfront.net/ - complaints: ***@netfront.net ---
Stefan Reuther
2014-12-18 21:23:35 UTC
Permalink
Post by Edzard Egberts
Post by Stefan Kanthak
Post by Edzard Egberts
string SID= "S-1-5-32-545";
ConvertStringSidToSidA(const_cast< char* >(SID.c_str()), &psid);
Du solltest auf UNICODE umstellen!
Eclipse und FLTK laufen mit Utf8 und den angegebenen String halte ich
eindeutig für ANSI. UNNICODE ist doch irgendetwas Seltsames von MS, das
brauche ich nicht. ;o)
Da Windows-Syscalls aber kein UTF-8 fressen, musst du zwischendurch
konvertieren. Das einfachste ist dabei, nach WCHAR bzw. wchar_t zu
konvertieren und dann die ...W-Funktionen zu benutzen.

Wenn's ein konstanter String ist wie oben ist das natürlich verzichtbar.

Falls dein Einwand sich auf den const_cast bezog, der ist laut MSDN
nicht notwendig:
http://msdn.microsoft.com/de-de/library/windows/desktop/aa376402%28v=vs.85%29.aspx
BOOL WINAPI ConvertStringSidToSid(
_In_ LPCTSTR StringSid,
_Out_ PSID *Sid
);
('C' in 'LPCTSTR' für 'const').


Stefan
Stefan Kanthak
2014-12-18 22:52:19 UTC
Permalink
"Stefan Reuther" <***@arcor.de> schrieb:

[...]
Post by Stefan Reuther
Da Windows-Syscalls aber kein UTF-8 fressen,
Es gibt seit Windows 8 gaaanz wenige Win32-Schnittstellen, die UTF-8
"fressen":

* DnsQuery_UTF8()
<http://msdn.microsoft.com/library/ms682016.aspx>

* DnsWriteQuestionToBuffer_UTF8()
<http://msdn.microsoft.com/library/ms682034.aspx>

...

Stefan
[
--
Die unaufgeforderte Zusendung werbender E-Mails verstoesst gegen §823
Abs. 1 sowie §1004 Abs. 1 BGB und begruendet Anspruch auf Unterlassung.
Beschluss des OLG Bamberg vom 12.05.2005 (AZ: 1 U 143/04)


--- news://freenews.netfront.net/ - complaints: ***@netfront.net ---
Edzard Egberts
2014-12-19 07:21:44 UTC
Permalink
Post by Stefan Reuther
Post by Edzard Egberts
string SID= "S-1-5-32-545";
ConvertStringSidToSidA(const_cast< char* >(SID.c_str()), &psid);
Da Windows-Syscalls aber kein UTF-8 fressen, musst du zwischendurch
konvertieren. Das einfachste ist dabei, nach WCHAR bzw. wchar_t zu
konvertieren und dann die ...W-Funktionen zu benutzen.
Das Einfachste ist, ohne Konvertierung die A-Funktionen zu benutzen und
auf Sonderzeichen zu verzichten. Du darfst nicht vergessen, dass ich für
Windows *und* Linux programmiere und mit WCHAR komme ich da nicht
besonders weit.
Post by Stefan Reuther
Falls dein Einwand sich auf den const_cast bezog, der ist laut MSDN
http://msdn.microsoft.com/de-de/library/windows/desktop/aa376402%28v=vs.85%29.aspx
BOOL WINAPI ConvertStringSidToSid(
_In_ LPCTSTR StringSid,
_Out_ PSID *Sid
);
('C' in 'LPCTSTR' für 'const').
Das muss eine neuere API sein, die von MinGW verlangt eindeutig einen
char* und den c_str() darauf frisst der Compiler nicht.

Ich bin ganz bestimmt nicht der Einzige, den die Abkündigung von Win-XP
kalt erwischt hat. ;o)
Stefan Reuther
2014-12-19 14:28:13 UTC
Permalink
Post by Edzard Egberts
Post by Stefan Reuther
Post by Edzard Egberts
string SID= "S-1-5-32-545";
ConvertStringSidToSidA(const_cast< char* >(SID.c_str()), &psid);
Da Windows-Syscalls aber kein UTF-8 fressen, musst du zwischendurch
konvertieren. Das einfachste ist dabei, nach WCHAR bzw. wchar_t zu
konvertieren und dann die ...W-Funktionen zu benutzen.
Das Einfachste ist, ohne Konvertierung die A-Funktionen zu benutzen und
auf Sonderzeichen zu verzichten. Du darfst nicht vergessen, dass ich für
Windows *und* Linux programmiere
Ich auch.
Post by Edzard Egberts
und mit WCHAR komme ich da nicht besonders weit.
Meine Lösung: die Anwendung arbeitet intern durchgängig mit UTF-8. Kurz
vor den Syscalls sitzt eine Portierungsschicht, die das unter Windows
nach WCHAR übersetzt (...oder CP_ACP, die paar Zeilen haben dann auch
nicht mehr wehgetan; ja, ich hab's unter Win95 getestet. Weil's geht!)
und unter Linux nach was-auch-immer-die-libc-gerade-braucht.
Post by Edzard Egberts
Post by Stefan Reuther
Falls dein Einwand sich auf den const_cast bezog, der ist laut MSDN
http://msdn.microsoft.com/de-de/library/windows/desktop/aa376402%28v=vs.85%29.aspx
BOOL WINAPI ConvertStringSidToSid(
_In_ LPCTSTR StringSid,
_Out_ PSID *Sid
);
('C' in 'LPCTSTR' für 'const').
Das muss eine neuere API sein, die von MinGW verlangt eindeutig einen
char* und den c_str() darauf frisst der Compiler nicht.
Das wäre dann ein Bug / Versehen in den MinGW-Headern, den man zumindest
Microsoft nur schwer anlasten kann.


Stefan
Edzard Egberts
2014-12-22 07:17:33 UTC
Permalink
Post by Stefan Reuther
Post by Edzard Egberts
Das Einfachste ist, ohne Konvertierung die A-Funktionen zu benutzen und
auf Sonderzeichen zu verzichten. Du darfst nicht vergessen, dass ich für
Windows *und* Linux programmiere
Ich auch.
Post by Edzard Egberts
und mit WCHAR komme ich da nicht besonders weit.
Meine Lösung: die Anwendung arbeitet intern durchgängig mit UTF-8. Kurz
vor den Syscalls sitzt eine Portierungsschicht, die das unter Windows
nach WCHAR übersetzt (...oder CP_ACP, die paar Zeilen haben dann auch
nicht mehr wehgetan; ja, ich hab's unter Win95 getestet. Weil's geht!)
und unter Linux nach was-auch-immer-die-libc-gerade-braucht.
Das ist wahrscheinlich die sichere Seite. Bin einfach davon ausgegangen,
UTF8 ohne Sonderzeichen ist ANSI und daher sind die A-Funktionen
verwendbar. Ich sollte aber wirklich noch ausprobieren, was mit
Sonderzeichen in Dateinamen passiert...
Post by Stefan Reuther
Post by Edzard Egberts
Post by Stefan Reuther
Falls dein Einwand sich auf den const_cast bezog, der ist laut MSDN
http://msdn.microsoft.com/de-de/library/windows/desktop/aa376402%28v=vs.85%29.aspx
BOOL WINAPI ConvertStringSidToSid(
_In_ LPCTSTR StringSid,
_Out_ PSID *Sid
);
('C' in 'LPCTSTR' für 'const').
Das muss eine neuere API sein, die von MinGW verlangt eindeutig einen
char* und den c_str() darauf frisst der Compiler nicht.
Das wäre dann ein Bug / Versehen in den MinGW-Headern, den man zumindest
Microsoft nur schwer anlasten kann.
Oder das ist erst später von Microsoft geändert worden. Habe es
jedenfalls noch einmal überprüft, Header und Funktionsname sind gleich,
aber bei MinGW ist es ein LPSTR und das gilt für WinVer >= 0x0500.
Uwe Kotyczka
2015-01-19 12:44:17 UTC
Permalink
Post by Edzard Egberts
Mein Ressourcen-Editor (BC 5.0 von 1995) ist wahrscheinlich nicht mehr
ganz aktuell, denn beim Rechtsklick auf eine Programmdatei werden unter
Win7 in den Eigenschaften kaum noch Einträge angezeigt, die über die
Programmversion hinaus gehen. Ich brauche da die Produktinfos,
Programmversion und das Icon.
Mit welcher Software sollte ich also die Ressourcen bearbeiten und wo
bekomme ich ein Beispiel der Ressource für die Produktinfos?
Möglicherweise hat das gar nichts mit Deinem Ressourcen-Editor zu tun.
Ich kenne BC 5.0 nicht, aber ich nehme an, daß Du damit die in die
*.exe gelinkte *.res Datei (welche beim Schreiben des Programms
irgendwann mal aus einer *.rc Datei erzeugt worden sein dürfte)
nachträglich verändern willst.

Meine Vermutung ist, daß Du noch nicht mitbekommen hast, daß im
Windows 7 Explorer mit "Kontextmenü -> Eigenschaften -> Details"
zwar die Versionsresourcen angezeigt werden, aber nicht mehr
_vollständig_. Unter XP hast Du mit mit "Kontextmenü -> Eigenschaften
-> Version" noch alle Strings zusehen bekommen, sogar selbst definierte
Kategorien. (Neben FileVersion und ProductVersion konntest Du als
Programmierer z.B. auch OsterEiVersion hineinschreiben. XP zeigte
dann z.B. OsterEiVersion: "2.0 rot" an.)

Seit Vista ist das anders. Da der gemeine Nutzer von den vielen
Angaben verwirrt werden könnte (Stell Dir die vielen von
OsterEiVersion: "2.0 rot" provozierten schlaflosen Nächte der
bedauernswerten Nutzer vor!), werden nun auch Einträge wie
PrivateBuild, die immer in der Versionsressource stehen, auf
Betriebssystemseite ausgeblendet.

Probier doch einfach mal Folgendes: Nimm irgendein Dir bekanntes
Programm (*.exe), schau es Dir in Deinem Ressourceneditor an,
kopiere auf einen USB-Stift und schau die Versionsangaben im
XP-Explorer und im Win7-Explorer an. Die Unterschiede werden Dir
ganz sicher auffallen.

HTH
Edzard Egberts
2015-01-20 07:17:35 UTC
Permalink
Post by Uwe Kotyczka
Post by Edzard Egberts
Mein Ressourcen-Editor (BC 5.0 von 1995) ist wahrscheinlich nicht mehr
ganz aktuell
Möglicherweise hat das gar nichts mit Deinem Ressourcen-Editor zu tun.
Ich kenne BC 5.0 nicht,
Sei froh! BC wie "Body Count"
(http://de.wikipedia.org/wiki/Body_Count_%28Album%29) - die perfekte
musikalische Entsprechung des mentalen Zustands, der sich bei Benutzung
dieser Software einstellte. :oO
Post by Uwe Kotyczka
aber ich nehme an, daß Du damit die in die
*.exe gelinkte *.res Datei (welche beim Schreiben des Programms
irgendwann mal aus einer *.rc Datei erzeugt worden sein dürfte)
nachträglich verändern willst.
Nein, damit habe ich *.res-Dateien verändert, diese mit MinGW-windres
compiliert und das Ergebnis statisch gelinkt. Jetzt habe ich mir ein
*.rc-Script gebastelt, das sich mit dem Editor bearbeiten und ebenfalls
mit windres compilieren lässt. Das ist perfekt - keine zusätzliche
Software mehr nötig!
Post by Uwe Kotyczka
Meine Vermutung ist, daß Du noch nicht mitbekommen hast, daß im
Windows 7 Explorer mit "Kontextmenü -> Eigenschaften -> Details"
zwar die Versionsresourcen angezeigt werden, aber nicht mehr
_vollständig_. Unter XP hast Du mit mit "Kontextmenü -> Eigenschaften
-> Version" noch alle Strings zusehen bekommen, sogar selbst definierte
Kategorien.
Selbst definierte Kategorien schluckt der windres nicht, aber mein
Skript funktioniert jetzt und zeigt die grundlegenden Sachen wie
Produktname, Version, Copyright und Hersteller an, damit bin ich zufrieden.
Post by Uwe Kotyczka
Seit Vista ist das anders.
Das hat aber niemanden interessiert, weil die Leute entweder das
XP-Downgrade benutzt, oder gleich auf Linux gewechselt sind.
Post by Uwe Kotyczka
Da der gemeine Nutzer von den vielen
Angaben verwirrt werden könnte (Stell Dir die vielen von
OsterEiVersion: "2.0 rot" provozierten schlaflosen Nächte der
bedauernswerten Nutzer vor!), werden nun auch Einträge wie
PrivateBuild, die immer in der Versionsressource stehen, auf
Betriebssystemseite ausgeblendet.
Da wird sogar das Löschen einzelner Einträge angeboten. Und bei der
Gelegenheit habe ich auch noch Manifeste entdeckt - dachte, das muss man
vielleicht auch benutzen: Jetzt findet Microsoft es also schon toll, an
bestehender Software herumzufummeln, die sind wirklich völlig
winzigweich im Hirn!
Post by Uwe Kotyczka
Probier doch einfach mal Folgendes: Nimm irgendein Dir bekanntes
Programm (*.exe), schau es Dir in Deinem Ressourceneditor an,
kopiere auf einen USB-Stift und schau die Versionsangaben im
XP-Explorer und im Win7-Explorer an. Die Unterschiede werden Dir
ganz sicher auffallen.
Nein, das ist so ziemlich das gleiche, damit ist dieses Problem wirklich
gelöst.

Ich habe auch herausgefunden, dass sich Icons wunderbar mit Gimp
erstellen lassen
(http://www.catalyst.net.nz/tutorial/creating-a-multi-resolution-favicon) und
muss nur noch herausfinden, welche Auflösungen/ Farbtiefen wirklich
gebraucht werden. Bei der Aussicht für ca. 20 Programme jeweils 15 Icons
zu malen, habe ich den Rechner ausgestellt und erst einmal Leiterplatten
bestückt. In meinen Augen sind die Windows-Macher die größten
Arschlöcher dieses Planeten.

Lesen Sie weiter auf narkive:
Loading...