AutoHotkey Homepage AutoHotkey Community
Let's help each other out
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

[module] CmnDlg 4.03 - Common Dialogs
Goto page 1, 2, 3, 4, 5, 6  Next
 
Post new topic   Reply to topic    AutoHotkey Community Forum Index -> Scripts & Functions
View previous topic :: View next topic  
Author Message
majkinetor



Joined: 24 May 2006
Posts: 3544
Location: Belgrade

PostPosted: Mon Mar 05, 2007 2:16 pm    Post subject: [module] CmnDlg 4.03 - Common Dialogs Reply with quote

 

_________________


Last edited by majkinetor on Fri Jan 18, 2008 6:56 pm; edited 60 times in total
Back to top
View user's profile Send private message MSN Messenger
majkinetor



Joined: 24 May 2006
Posts: 3544
Location: Belgrade

PostPosted: Mon Mar 05, 2007 2:21 pm    Post subject: Reply with quote

One strange thing happening. If you check the code you will see lines:

Code:
VarSetCapacity(i, 4, 0)
InsertInteger(idx, i, 0)
r := DllCall("shell32.dll\PickIconDlg", "uint", hGui, "uint", &wIcon, "uint", size, "int", &i)

if I do this without VarSetCapacity and InsertInteger it will not work, the windows will receive ascii codes. Like, if you set idx := 1 31st icon will be selected as ASCII(1) = 31.

Now, this is strange, I expect dll call to handle this as I specify "uint" as an parameter.
_________________
Back to top
View user's profile Send private message MSN Messenger
Sean



Joined: 12 Feb 2007
Posts: 1141

PostPosted: Mon Mar 05, 2007 2:37 pm    Post subject: Reply with quote

This is normal. You only give the address of i, and i is stored as a string. Use a pointer instead: "intP", i like in
http://www.autohotkey.com/forum/topic16755.html
Back to top
View user's profile Send private message
majkinetor



Joined: 24 May 2006
Posts: 3544
Location: Belgrade

PostPosted: Mon Mar 05, 2007 3:02 pm    Post subject: Reply with quote

ah... my mistake.. i somehow confused uint with intp

Hmm.. something is wrong with the function. Suddenly it stoped returning new path upon selection.... The index is returned correctly but the path stays the same as on input for some reason, even if you change it.
_________________
Back to top
View user's profile Send private message MSN Messenger
Sean



Joined: 12 Feb 2007
Posts: 1141

PostPosted: Mon Mar 05, 2007 3:43 pm    Post subject: Reply with quote

Looks like the script doesn't count the null terminator character at all. Then, lstrlen function might not function as expected. That could be a cause.
Back to top
View user's profile Send private message
majkinetor



Joined: 24 May 2006
Posts: 3544
Location: Belgrade

PostPosted: Mon Mar 05, 2007 3:46 pm    Post subject: Reply with quote

Argh I must get some sleep..

I changed the func, and left something that was there in my initial runs.. count of chars that i removed latter...


Btw, it counts null char, that is the reason for 1025 ~ Max_PATH*2 + 1

ok, just redownload
_________________
Back to top
View user's profile Send private message MSN Messenger
Sean



Joined: 12 Feb 2007
Posts: 1141

PostPosted: Mon Mar 05, 2007 4:09 pm    Post subject: Reply with quote

I didn't mean the buffer length, 1025 + 1 is far more than enough mostly even with Unicode function, I suppose. I meant the parameter like StrLen() etc. To be safer, they should be like StrLen() + 1 etc IMO.
Back to top
View user's profile Send private message
majkinetor



Joined: 24 May 2006
Posts: 3544
Location: Belgrade

PostPosted: Mon Mar 05, 2007 4:30 pm    Post subject: Reply with quote

well, msdn explicitely states where it requires null char counted and where not.
_________________
Back to top
View user's profile Send private message MSN Messenger
majkinetor



Joined: 24 May 2006
Posts: 3544
Location: Belgrade

PostPosted: Mon Mar 05, 2007 8:37 pm    Post subject: Reply with quote

I reordered things a little
_________________
Back to top
View user's profile Send private message MSN Messenger
n-l-i-d
Guest





PostPosted: Mon Mar 05, 2007 11:14 pm    Post subject: Reply with quote

Very cool! Cool

Icon doesn't insert correctly into your example for me.


Wondering... Does anybody know what the exact system requirements are for these emerging COM/OLE scripts? Does it need NT or IE or anything?
Back to top
majkinetor



Joined: 24 May 2006
Posts: 3544
Location: Belgrade

PostPosted: Mon Mar 05, 2007 11:54 pm    Post subject: Reply with quote

I tried this and it showed me folder icon

Code:
s := "c:\windows\system32\shell32.dll"
idx := 4
ChooseIcon(s, idx)


About COM, nothing special, just IE.
_________________
Back to top
View user's profile Send private message MSN Messenger
n-l-i-d
Guest





PostPosted: Mon Mar 05, 2007 11:57 pm    Post subject: Reply with quote

Ok, I see, your example does not add the actual selected icon, only the first.

I guess COM/OLE needs IE3, from reading a bit, and it should be available from Win95 on... Now I'm still wondering if all the COM scripts here actually would work on a Win95 system with IE3.
Back to top
Sean



Joined: 12 Feb 2007
Posts: 1141

PostPosted: Mon Mar 05, 2007 11:58 pm    Post subject: Reply with quote

majkinetor wrote:
Btw, it counts null char, that is the reason for 1025 ~ Max_PATH*2 + 1

Hmm, where did you get MAX_PATH is 512?
AFAIK, MAX_PATH is 260 = 3 + 256 + 1, and the last 1 is indeed for the terminating null (:the first 3 is for drive like C:\).
Back to top
View user's profile Send private message
Sean



Joined: 12 Feb 2007
Posts: 1141

PostPosted: Tue Mar 06, 2007 12:02 am    Post subject: Reply with quote

n-l-i-d wrote:
I guess COM/OLE needs IE3, from reading a bit, and it should be available from Win95 on... Now I'm still wondering if all the COM scripts here actually would work on a Win95 system with IE3.

I'm afraid that you're a bit confused. There is no COM here, comdlg32.dll is Common Dialog (:there is indeed a custom comdlg32.ocx which is used by VB).
Back to top
View user's profile Send private message
majkinetor



Joined: 24 May 2006
Posts: 3544
Location: Belgrade

PostPosted: Tue Mar 06, 2007 9:38 am    Post subject: Reply with quote

well, max path is 260 TCHARS AFAIK. SO, in unicode terms it is double. Why I used double of double, don't ask... was very sleepy and crashed yesterday, I made bunch of trivial errors. I didn't use 260, but degree of 2 as it is the fastest to alocate buffers with such size.
_________________
Back to top
View user's profile Send private message MSN Messenger
Display posts from previous:   
Post new topic   Reply to topic    AutoHotkey Community Forum Index -> Scripts & Functions All times are GMT
Goto page 1, 2, 3, 4, 5, 6  Next
Page 1 of 6

 
Jump to:  
You can post new topics in this forum
You can reply to topics in this forum


Powered by phpBB © 2001, 2005 phpBB Group