이전 나의 글을 읽어보면 알겠지만 너 덕분에 PATH의 자동변환스크립트를
작성 할 수 있었다.
그 작업에 필요했던 WM_SETTINGCHANGE에 대해서 궁금하다
이 메세지는 무엇이며 내부 구현이 어떻게 작동하는지
발동조건이 정확하게 무엇인가에 대해서 자세하게 알려 줄 수 있나?
이전 나의 글을 읽어보면 알겠지만 너 덕분에 PATH의 자동변환스크립트를
작성 할 수 있었다.
그 작업에 필요했던 WM_SETTINGCHANGE에 대해서 궁금하다
이 메세지는 무엇이며 내부 구현이 어떻게 작동하는지
발동조건이 정확하게 무엇인가에 대해서 자세하게 알려 줄 수 있나?
https://msdn.microsoft.com/en-us/library/windows/desktop/ms725497(v=vs.85).aspx
이런 답답시런 대답을 원하는게 아니다 이런 검색은 나도 충분히 한다
검색은 할 줄 알면 한글 번역이 필요한건가? 아니면 저 과정에 관련된 문서를 죄다 링크해달라는건가
니가 앞에 쓴 글만 보았을 땐 니 작업에 들어간건 setx 명령어인거 같은데 뭐가 궁금한건지 의도 파악이 안된다. 한가지 말해줄수있는건 특정 레지스트리를 바꾸기 위한 함수가 아닌 임의의 레지스트리 값을 수정하는 함수로 레지스트리 값을 수정한 경우 그 레지스트리를 참고하고 있는 프로그램에게는 아무런 통보가 되지않기 때문에 현재 쓰고 있는 프로그램에도
님이 ㅅㅅㅅ 본인 맞는가? 문서를 읽고 싶은게 아니라 함축된 개괄적이면서도 디테일한 설명과 어째서 새로운 환경변수를 만들었을때 저 메세지가 발동하는지에 대한 이유다
변경한 레지스트리가 적용되길 원한다면 레지스트리를 직접 변경하는 것이 아닌 해당 레지스트리를 관리하는 함수를 호출하는 것이 맞다. 아마 setx가 그러한 커맨드일테고 wm_settingchange는 setx 함수가 모든 윈도우에 보내는 메세지겠지.
이 작업을 setx말고 다른방법으로 BAT파일을 이용해 브로드캐스팅 할 수 있는 방법이 있는가?
어째서 reg add 명령어는 그러한 작업을 거치지 않는지?
디자이너야 동양풍이면서도 서양풍 컨셉을 잡아와라
적어도 문서를 읽었다면 대충 어떤 상황에서 저 메세지가 일어나는지는 알거라 생각한다. 레지스트리 관련 함수에 관해 좀 더 구체적으로 어떤 함수에서 일어나는지를 설명하면 그 레지스트리를 관리하는 무언가가 제공하는 인터페이스를 사용하면 내부적으로 Reg 관련 함수가 호출되고 해당 레지스트리를 사용하는 이를 알려줘야하므로
메세지를 브로드캐스팅하게 된다. 아 덧글 글자수 제한 짜증난다.
그러니까 요약하면 Reg 관련 커맨드나 함수는 자기 레지스트리를 수정하라고 있는거고 Setx와 같은 커맨드는 그냥 환경 변수를 수정하는데 쓰는 함수이다. 결과적으로는 둘 다 환경변수를 관리하는 모듈이 관리하는 레지스트리를 수정하지만 하나는 모듈을 통해 적합한 절차를 거친거고 다른 하나는 말하자면 무단 침입해서 수정한거나 다름 없다.
setx를 통해 wm_settingchange가 발동된다는것은 안다. 내가 원하는 답은 reg add쪽에서는 어떤이유에서 이 메시지를 발동하지 않는지 그리고 reg 명령어 자체가 왜 그러한 옵션을 제공하지 않는지이다. 또한 윈도우 기본환경에서 그외 다른방법으로 wm_settingchange를 발동 할 수 있는 다른 명령어나 특수한 방법이 있는지 묻고있는 것이다.
REG는 누군가의 메모를 수정함. SEXT는 환경변수 관리자에게 메모를 수정햐달라고 부탁함. 누군가의 물건을 니가 무단으로 수정하면 다시 확인하지 않는 이상 모르지만 메모 관리자에게 부탁하면 수정 후 메모를 참고하는 사람들에게도 알려줌
Reg함수는 말그대로 레지스트리에 접근만 하는거지 다른 기능을 제공하지 않는다. 굳이 존재 이유를 따지자면 아직 설치되지않은 친구가 자기가 사용할 레지스트리를 설정할 때 쓰라고 있는거고
Setx와 같은 함수는 환경변수를 관리하는 모듈이 제공하는 커맨드로 해당 모듈을 만든 사람이 필요하다고 생각되는 루틴이 들어있다.
그렇다면 저 레지스트리는 setx를 통해서만 관리하고 있기 때문에 sysdm.cpl로 마우스 깔딱거리는 방법이나 powershell의 다른 명령어를 쓰는 방법 외에는 wm_settingchange 메세지를 발동시키는 다른방법이 없다는 얘기군?
니가 만약 setx와 같은걸 구현한다면 setregistry와 같은 함수를 써야겠지.
기본제공되는 환경만 가정함
ㄴㄴ 환경변수를 관리하는 함수가 setx인거고. 레지스트리 관리는 레지스트리 관리 모듈에서 하는거지. 그러니까 레지스트리를 관리하는 모듈에서는 그게 환경 변수인지 몰라.
API로는 wm_settingchange를 보낼수있는데 bat은 내가 익숙하지 않아서 모르겠다. 일단 권장 사항은 올바른 접근 경로인 setx를 쓰라는거다.
클래스의 개념을 빌려오자면 reg를 상속 받아서 환경 변수 곤련 처리를 추가한게 setx라고 생각하면 될거 같네
독한 술 마셔서 오타가 심하다 양해 좀...
setx에서 wm_settingchange메세지를 발동시킨다는 얘긴가? 관리 모듈이 한다는 얘긴가? 전자인 경우이든 후자의 경우이든 reg add는 그렇다면 왜 레지스트리 관리 모듈로 처리를 하지 않는가?
환경변수 관리모듈(가칭)이 제공하는 기능 = setx, 레지스트리 관리 모듈이 제공하는 기능 = reg
setx라는 거지같은 명령어는 문자열이 1024가 넘어가면 컷트해버리는 치명적인 맹점을 안고있다 이런 리스크를 이용자가 감수해야하니까 하는 얘기다
레지스트리가 환경 변수(path)가 아니다. 레지스트리는 그냥 환경 변수(path)가 저장되어있는 곳이야.
여하튼 대략적인 내용은 알겠다 상세하고 친절한 댓글 땡큐하다
결론은 setx가 좆같아서 못쓰겠단 말이잖아. 시발 처음부터 그렇게 말했으면 다른 방법을 찾아봐줬을거 아냐
http://poshcode.org/2049
WM_SETTINGCHANGE를 브로드캐스팅하는 파워쉘 코드라는데 잘 동작하는지는 나도 모르겠다.
앞에댓글에 파워셀은 제외한다고 얘기했음
뭐 여하튼 알고 있는것도 나쁘진 않을듯
근데 명령어가 너무 복잡하다-.- 그냥 setx로 브로드캐스팅을 하지
이럴거면 그냥 C나 C++로 exe를 하나 맹글지 ㅋㅋ
파워셀의 단점은 USB 포터블이 불가능하단 점이다 그래서 첨에 파워셀로 패스등록 작성을 했다가, ㅅㅅㅅ가 알려준 레지스트리 업뎃방식으로 바꾼거고 wm_settingchange가 필수요소라 이런 머시기 같은 뻘짓을 해야하나 왜 reg add가 자동처리 안해주나라는 관점에서 질문을 올린 것이다
Bat에서 powershell 호출하게 처리하먼 안되나? 지금 찾아보고 있는데 대체로 VBScript나 다른 프로그램을 bat에서 실행 시키는 방식이네
일단 Reg에서 처리 안해주는 이유는 레지스트리 매니져가 그 값이 무슨 용도인지 모르기 때문임.
그러니까 그게 그렇게 해야하는데 USB에서는 Powershell 작동이 안된다
또한 단일파일이 아닌 파일을 두개로 나눠야 하니까 맘에 안든다
지금 오토런 쓴다는 이야기 아니야? 시작 프로그램만 bat으로 해놓으면 bat에서 뭔가 하는건 제약 없을텐데. 근데 그냥 찾을 시간에 c로 하나 짜는게 빠를거 같아.
파일을 하나로 묶고 싶다면 드랍 방식으로 처리하던지 exe에 리소스르 박아넣던지
그러니까 exe까지는 쓰고싶지 않은거지 안그럼 그냥 C나 C++로 A-Z까지 작성하면 되는거니까;
컴파일을 궂이안해도 BAT은 수정해서 바로 쓰면 되니까 귀찮음을 훨씬 덜 수 있다는거 정도? C나 C++은 의존성 걸리면 것도 포함시켜 줘야하니까 포터블시
PATH따위 변경하는데 C C++까지 가세하고 싶지는 않은거지 ㅋ
일단 난 여기까지인듯... 아마 ㅅㅅㅅ형도 비슷할거야.