hej!! > 1. finns det nånstans exempel eller vad som helst som visar hur man använder ini filen som inställningar för ditt program?? Hej! Rickard, du har rätt som vanligt, men under själva utvecklingsfasen av ett program är INI-filer mycket bra att lagra information i då de inte kräver samma mängd sökningar för att redigera information i som i registret... Det enda sättet att spara vården centralt i nätverksmiljö, i alla fall Japp, registry och roaming profile. Det är en evig diskussion var uppgifter skall sparas. Jag använder ini fil > Det är en evig diskussion var uppgifter skall sparas. Tack så hemskt mycket för alla svaren ... Hej > Måste reagera på snacket om inifil. Hej > men det betyder inte att man inte kan använda inifiler för den lokala exefilens underhåll Hej igen Det är detta exempel som jag hittade där du tipsade mig .... Igen2 frågot ...
jag har två frågor som jag hoppas att nån kan svara ...
1. finns det nånstans exempel eller vad som helst som visar hur man använder ini filen som inställningar för ditt program??
tex att man ställer in några inställningar för programmet och då sparas alla inställningar i ini filen och när man startar om programmet så läser programmet av ini filen vilka inställningar man vill ha ...
2. är det nån som kan hur man gör så att när man trycker på en knapp i sitt program så stängs alla program, spel och alla andra fönster i windows förutom sitt eget program då ??
Tack så hemskt mycket ........
MVHSv: 2 frågot ...
> tex att man ställer in några inställningar för programmet och då sparas alla inställningar i ini filen och när man startar om programmet så läser programmet av ini filen vilka inställningar man vill ha ...
Nej, jag kan inte svaret på den direkta frågan!
ini-filer är en gammal kvarleva från Win3.*-tiden och ska inte längre användas. Från Win95 och WinNT4 och framåt så är det registry som gäller för att spara en applikation/användares inställingar.
En applikations inställingar ska sparas i HKEY Local Machine och en användares inställingar ska sparas i HKEY Current User.Sv: 2 frågot ...
Jag använder inimetoden till en del varde i programmen.
Nedanstående exempel hämtar under
[system]
land=sv
finns inte värdet sparas ett default: sv
Declare Function GetConfigString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
Declare Function PutConfigString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long
Const ConFigFile as String ="mininifil.ini"
Tempstr = Space(255)
TempStr1 = "land"
Rc = GetConfigString("System", TempStr1, "", Tempstr, 255, ConFigFile)
If Rc = 0 Then
Tempstr = "sv"
Rc = PutConfigString("system", TempStr1, Tempstr, ConFigFile)
Else
Land = Left(Tempstr, Rc)
End If
/BoSv: 2 frågot ...
Att sedan ini-filen blir kvar i vissa program får väl betraktas som ett fiasko av utvecklaren....Sv: 2 frågot ...
som jag kommit, på är ini filsmetoden. Någon som har ett bättre förslag?
/BoSv: 2 frågot ...
Det är så det är tänkt att fungera i ett korrekt konfat Windows-nät.
Vad man ska tänka på är att registry skiljer på en dator och en användare helt och hållet, via HKLM och HKCU.
(HKLM = HKEY Local Machine)
(HKCU = HKEY Current User)
Exempel.
Du har PC1 och PC2 och DC1 (Domain Controler) och User1 och User2.
Om du skriver en applikation som sparar alla applikationsspecifika inställingar i HKLM och alla användarspecifika inställingar i HKCU så fungerar det som följer.
User1 loggar in med sitt domain-konto på PC1 och installerar din applikation. Då kommer det att skrivas ett gång nycklar i HKLM, tex applikationens namn och versionsnummer ock så vidare. User1 loggar av och User2 loggar in. User2 kan nu läsa applikationens inställingar.
User2 gör nu lite ändringar i applikationen, som är användarspecifika, och dessa sparas under HKCU. När User2 loggar av så sparas HKCU till user.dat (som ligger i User Profile för User2). User Profile kommer att kopieras till DC1 när User2 loggar av.
User1 loggar in på PC2 och installerar din mjukvara och loggar av. User2 loggar in på PC2. DÅ kommer User Profile att läsas in från DC1 och user.dat kommer att packas upp till HKCU. User2 startar din applikation på PC2 och ser att han har samma inställingar som han hade på PC1.
I korta drag är det så det fungerar. Vill du ha en längre och utförlgare beskrivning så får du be om en sådan så ska jag se vad jag kan skriva ihop.
Som jag skrev i mitt förra inlägg så har det fungerat så här sedan Win95/WinNT4 i Windows-världen., gammal info mao!
Jag har jobbat som systemadministratör med Windows-nät sedan 1996 och jag kan säga att man blir nådigt arg när man får en mjukvara som man ska implementera som håller på med ini-filer. Det finns en fullt fungerande lösning med registry och roaming profile. Den är öppen att använda för alla applikationer. Det är också så en applikation ska fungera för att uppfylla kraven för 'Certified for Windows'. Det är också så en applikation ska fungera för att jag som systemadministratör ska kunna använda mig av Policies (WinNT4) och/eller Group Policies (Win2000/Active Directory). Det förenklar för oss systemadministratörer något oerhört om alla applikationer använder samma standard för sina inställingar istället för att varje enskilld mjukvara ska ha sin egen lösning.
Det finns massor av dokument på Microsofts web som beskriver detta. Två som jag hittade efter en snabb letning:
IntelliMirror Lets Your Information "Follow" You
http://www.microsoft.com/windows2000/server/evaluation/business/management.asp
User Data and Settings Management
http://www.microsoft.com/windows2000/techinfo/administration/management/settings.aspSv: 2 frågot ...
där det passar och en central databas där det är lämpligast.
Registry är inte det enda saliggörande, det finns fullt motiverade alternativ.
Den typ av programvara som jag utvecklar kräver i stort sätt inget ingrepp
av systemadministratör. Jag har varit med om för många It avdelningar
där kompetensen har varit undermålig.
Jag har jobbat med programutveckling sedan 1978 och följt (och hängt med)
i utvecklingen!
/BoSv: 2 frågot ...
Tyvärr är det så. Och jag förstår faktiskt inte varför?!
> Jag använder ini fil där det passar och en central databas där det är lämpligast.
Naturligtvis. Registry ska användas på installerade applikationer. Ett installationsprogram kan tex behöva använda sig av ini-filer. En applikation som inte installeras kan ocksåå använda sig av ini-filer. Märk väl att det är applikationens/användarens inställingar som ska sparas i Registry, inte det som applikationen producerar. Exempelvis DNS-tjänsten använder sig av text-filer för vad den producerar. Men inställingarna för DNS-tjänsten ligger i Registry.
> Registry är inte det enda saliggörande, det finns fullt motiverade alternativ.
Naturligtvis beroende på vad för data som ska sparas!
> Jag har varit med om för många It avdelningar där kompetensen har varit undermålig.
Jag också, tyvärr. Och min förklaring till det problemet är för att det är för dålig kompetens på utvecklare/administratörer.Sv: 2 frågot ...
men finns det nån som kan svara på den andra frågan ... :-)
TackSv: 2 frågot ...
Måste reagera på snacket om inifil.
Det är bara en massa "bullshit" , snobberi ,kalla det va faen
ni vill ,att man inte skall använda inifiler längre. !
Var har ni fått det ifrån, inifiler är alldeles utmärkta att spara
specialdata i. Vad grundar Ni Ert påstående på. ???
Snobberi och kvalificerat "bullshit" är vad det är.
Inifiler är ett mycket bra redskap för grundinställningar till sitt
program.Men ett Obs man skall inte lägga dom i Windows
utan lägg dom i samma mapp som applikationen.
Den största djä... skräphög man kan hitta på sin dator är
registret,det är inte klokt vilka friheter programmakarna tar sig
när det gäller att lägga in skit i registret.Om dom hållit sig till
lokala inifiler skulle det var en lisa för oss användare som
inte tål att programmakarna våldtar våra datorer.
Dixi
SvenSv: 2 frågot ...
[..]
Eftersom att det var jag som sa att man inte ska spara en applikations/användares <b>inställingar</b> i ini-filer så känner jag mig manad att besvara ditt påhopp!
Jag gav tidigare 2 artiklar som förklarar bla Intellimirror. Börja med att läsa igenom dom SvenPon. Därefter tar jag gärna och för en konstruktiv diskussion om varför man ska spara i registret!Sv: 2 frågot ...
Visst skall man lägga vissa userinställningar i Registret
men det betyder inte att man inte kan använda inifiler
för den lokala exefilens underhåll.Inifilen har en bra struktur
tydliga rubriker med sina underrubriker. Good.
Visste att vedträet skulle ta sig.
Sven som använder inifiler vad fae... Ni än säger.Sv: 2 frågot ...
Jag har inte heller påstått något som motsäger det!
> Inifilen har en bra struktur tydliga rubriker med sina underrubriker.
Jag som admin (som till slut är en av dem som ska använda det ni utvecklare producerar) bryr mig inte ett jota om strukturer i olika medier. Vad jag bryr mig om är att en mjukvara ska fungera efter de specar som Microsoft ritar upp, och inte efter utvecklares egna tycke och smak. Först då kan jag börja använda de verktyg som finns för att konfigurera _alla_ mjukvaror i mitt nätt på samma sätt.
Idag kan jag inte det och jag svär ve och förbannelse över utvecklare varje dag! Tyvärr! :-(Sv: 2 frågot ...
Fråga 2. Ganska lurigt att förklara,men så här kan du göra.
http://www.allapi.net
API-Guiden finns många bra exempel bla detta.
Du skall lägga upp exempel EnumThreadWindows.
Då får du Handlerna och ClassName för alla öppnade fönster.
Sedan stegar du genom alla dessa i en loop
och kör ret = SendMessage(aktuell handler,WM_CLOSE,&00,&00)
Du skall då stänga alla handler utom din egen Me.Hwnd
Efter denna princip kan man göra.
mvh
SvenSv: 2 frågot ...
<code>
'in a form
Private Sub Form_Load()
'KPD-Team 2000
'URL: http://www.allapi.net/
'E-Mail: KPDTeam@Allapi.net
Dim ThreadID As Long, ProcessID As Long ' receive id to thread and process of Form1
' Determine the thread which owns this window
ThreadID = GetWindowThreadProcessId(Me.hWnd, ProcessID)
' Use the callback function to list all of the enumerated thrad windows
EnumThreadWindows ThreadID, AddressOf EnumThreadWndProc, 0
'Show the results
Me.AutoRedraw = True
Me.Print sClasses
End Sub
'In a module
Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hWnd As Long, lpdwProcessId As Long) As Long
Declare Function EnumThreadWindows Lib "user32" (ByVal dwThreadId As Long, ByVal lpfn As Long, ByVal lParam As Long) As Long
Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hWnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
'variable used to list all the classnames
Public sClasses As String
Public Function EnumThreadWndProc(ByVal hWnd As Long, ByVal lParam As Long) As Long
Dim Ret As Long, sText As String
'create a string-buffer
sText = Space(255)
'get the classname of the window handle
Ret = GetClassName(hWnd, sText, 255)
'cut off the unnecessary part of Chr$(0)'s
sText = Left$(sText, Ret)
'add this classname to the list of classnames
sClasses = sClasses + sText + vbCrLf
'continue the enumeration
EnumThreadWndProc = 1
End Function
</code>
jag fattar inte riktigt hur jag ska göra nu, kan du förklara det du menade lite mer ... ge gärna exempel, jag är ganska nybörjare till vb ...
tack så hemskt mycket!!Sv: 2 frågot ...
Kom på att detta inte räcker du måste också ta in EnumVindows.
Skall nu ta ett krafttag i detta och skriva en artikel.
Hur får man tag i ett speciellt programs Handler.
Som tidigare skrivits det är "som en finne i röven"
att få tagi handlern för ett annat prog Window.GetWindows är ett
verktyg man behöver FindWindow kan också hjälpa.
Det är en svår kombination att plocka just det man vill ha
Torbjörn jag har inte glömt din fråga !
Jag gjorde det i VB3 och stal info från Telekatalogen.
Nu finns det önskemål att "stjäla" info från BilRergistret och
ta in det i VB. Klart att det går , Jag jobbar på problemmet.
Det här är grundsanning, om du kan få handlern för det Windows
som innehåller info. så kan du läsa och skriva till detta fönstrets
TextBoxar,ListBoxar/ComboBoxar mfl. Man gör det med SendMessage
mvh
Sven