Language : AutoHotkey

Author : 예지력

Feature : attach a window to another, and vice versa (see Dock Example.ahk for info)


예전에 작성하다만 코드인데, 새롭게 다시 작성했습니다

이상하게 함수를 레지스터할 때, Fast 옵션을 추가하면 콜백이 정상적으로 이루어지지 않는데.. 딱히 해당 옵션이 필요한 것도 아니라서 그냥 뺐습니다


예제(Dock Example.ahk)처럼 circular reference 가 형성되어 있다면, 반드시 관계를 끊고 클래스 Destructor 가 호출될 수 있도록 해야 합니다


'프로그래밍 > Archive' 카테고리의 다른 글

Dock - attach a window to another  (1) 2017.04.23
DynaScript - Child 프로세스로 코드 실행  (27) 2015.12.14
[Lib] Class Msgbox  (6) 2015.11.27
[Lib] CleanNotify  (4) 2015.11.21
WinWaitCreated()  (0) 2015.10.17
MS Office Style Gui 프로토타입  (3) 2015.10.09
  1. test 2017.12.31 16:10 신고

    감사합니다

PG(프로필렌 글리콜, Propylene Glycol) vs. VG(식물성 글리세린, Vegetable Glycerin)


전자담배의 액상은 향료와 니코틴을 제외하면 대부분 PG와 VG로 구성됩니다.

이제 막 전자담배를 시작하는 분이시라면 이 두 가지가 어떻게 다른지 그리고 이것이 무엇을 하는지 궁금하실 텐데요.  

아래에서 이를 다루어 보겠습니다.

PG와 VG가 무엇일까?

간단히 말씀드리면, PG와 VG는 전자담배의 액상을 제조할 첨가하는 무색, 무취의 용액입니다.
전자담배의 액상이 기화되었을 때, 연무를 발생시키는 전달물질이며. 타격감이라고 부르는 담배의 목넘김을 표현하는데도 일정 부분 기여를 합니다.
또한 PG와 VG는 각기 다른 맛을 지니고 있습니다.

현대의 모든 전자담배의 액상은 PG와 VG를 포함하고 있지만, 액상에 따라 그 비율은 굉장히 다릅니다.
무화기를 포함한 전자담배의 기기는 일정 비율의 PG와 VG가 함유된 액상을 사용해야만 하는 경우도 있습니다.

더 자세히 알아보도록 하죠

 

PG(프로필렌 글리콜, Propylene Glycol)


이게 정확히 뭘까?

PG는 Propylene Glycol, 프로필렌글리콜의 약자입니다. 석유에서 파생된 물질이고요. 무색, 무취이며 VG보다 점도가 낮습니다.
전자담배의 액상에서 타격감이라 불리는 목넘김(Throat hit)을 제공하기 위하여 이용됩니다.
VG보다 액상의 향을 더 효과적으로 전달하기 때문에, 더욱 강하고 진한 향을 느낄 수 있습니다.

 

어디에 사용될까? 


프로필렌글리콜은 일반 가정에서도 흔하게 사용되고 있습니다.
 

  • 천식 호흡기
  • 애완동물 사료
  • 구강을 이용해 사용하는 의료제품
  • 화장품
  • 샴푸


안전한가?
지금까지 보고된 연구결과로는 PG는 섭취 시 안전한 물질입니다. 美 식약청 FDA는 식품에 사용 시, 일반적으로 안전하다고(Generally recognised as safe) 밝혔습니다. 그러나, PG의 안전성을 확인하는 연구들은 직접 섭취하는 것을 확인한 것이고, 증기로 흡입시의 안전성은 확인되지 않았습니다.

오래된 연구결과이지만, 1947년에 진행되었던 연구에서는 PG를 증기로 흡입할 인체에 무해하다고 밝혔습니다.

 

2010년에 진행된 연구에서는 PGE(프로필렌글리콜과 글리콜에테르의 결합) 가 유아의 기관지 발달에 장애를 가져올 위험을 높이는 것으로 밝혀졌습니다. 천식, 습진, 그리고 알레르기와 같은 것을 말이죠. 하지만, 연구자는 PG가 아닌 글리콜에테르가 악영향을 끼치는 것으로 판단하였습니다.

연구결과를 볼 때, PG는 증기로 흡입 시에도 안전하다고 판단할 수 있습니다, 물론 더 많은 연구와 시간이 필요한 것은 사실입니다.

일부 사람들은 PG가 독성 물질로, 부동액의 원료라고 합니다. 하지만 부동액에 사용되는 것은 PG가 아닌, 에테르 글리콜입니다, 연관이 없는 것은 아니지만 액상에 포함되는 물질은 아닙니다.

PG는 통상적으로 인간에게 안전하다고 확인되는 물질이지만, 동물에게는 치명적입니다, 특히 고양이에게요.
프로필렌글리콜은 개의 사료에 첨가되지만, 고양이가 섭취 시 빈혈(Heinz body)을 야기할 수 있습니다.
고양이가 있는 곳에서는 PG가 높은 액상의 베이핑을 삼가세요.

 

그밖에 PG에 대해 주의할 점
몇몇 사람들은 PG가 높은 액상을 베이핑 할 시에 알레르기와 같은 반응을 보입니다. 드문 케이스이지만 학계에 보고된 적은 있습니다.
PG 액상을 베이핑 시 가슴이 답답하거나, 호흡이 불편해지는 등 평소와 다른 이상한 느낌이 든다면 고 VG 액상을 사용하시기를 권합니다.
많은 액상 제조사가 이러한 옵션을 제공하는 추세입니다.

고 PG의 액상을 베이핑 할 때의 단점은 건조함입니다. 입술을 포함한 입, 코, 그리고 목이 건조해집니다.
그로 인해 목 아픔이 발생하기도 하고, 갈증을 유발하기도 합니다. 이러한 증상은 지속적으로 베이핑 할 시 차츰 나아지는 경우도 있습니다.
전자담배를 사용하는 분이라면 자주 물을 마셔 입과 목을 건조하지 않게 유지하는 것이 중요합니다.

또한, 일반 연초담배에서 전자담배로 막 이동하신 사람이라면 위의 증상이 단순히 PG 때문이 아니라 연초담배의 금연에서 오는 금단증상일수도 있습니다.

 

VG(Vegetable Glycerin, 식물성 글리세린)

 


VG는 Vegetable Glycerin 식물성 글리세린의 약자입니다. 식물 기름에서 추출한 천연물질이니 채식주의자들에게도 안전합니다.

증기의 묵직함(thick), 연무를 부드럽게 뭉쳐주는 역할을 하고요. VG는 단 맛이 나는 편이고 PG보다 점도가 높습니다.
같은 비율이라도 고 VG 액상이PG 액상보다 더 부드러운 목넘김을 표현하기 때문에, 서브 옴 베이핑에 더 적합합니다.

희석 니코틴과 향료가 PG로 구성되어 있는 편이지만, 일부 액상 회사들은 VG 베이스 향료와 VG 희석 니코틴을 제공합니다, 100% VG 액상을 제공하기 위해서요.

 

어디에 사용될까?


VG는 많은 의료품, 식료품, 그리고 일상용품에 사용됩니다.
 

  • 설탕을 대신하는 스위트너
  • 화장품, 쉐이빙 폼(젤), 데오도란트
  • 애완동물 사료
  • 비누, 핸드크림
  • 의료 크림, 알약, 젤리
  • 치약, 구강관리 용품

 

안전한가? 

美 식약청 FDA는 VG 역시 PG와 동일하게 일반적으로 안전하다고(Generally recognised as safe) 밝혔습니다. VG는 인간이 사용하는 여러 물질 중 가장 널리 이용되는, 순한 물질로 보고되었습니다. SIDS 보고서는 섭취 시 독성이 매우 낮으며, 피부나 눈에 이상을 불러일으킬 가능성이 낮다고 밝혔습니다. 하지만, PG처럼 이를 증기 형태로 흡입할 때의 독성에 대해서는 연구가 부족합니다.

2008년에 진행된 연구에서는 VG를 기체로 흡입할 때 독성이 있지만 미미하다고 밝혔습니다. 따라서 에어로졸 형태의 VG는 안전하다고 봐도 무리가 없겠지만, 더 많은 연구가 필요합니다.

VG에 알레르기반응을 보이는 것은 정말로 낮습니다, 때문에 PG 알레르기를 겪는 베이퍼라면 VG 액상을 권합니다.

하지만 만약, 코코넛 오일 또는 야자 오일에 알레르기반응이 있다면 VG도 알레르기를 일으킬 수 있습니다.

당뇨병을 겪는 사람이라면 VG가 치료를 저해할 수 있습니다만, 베이핑의 VG의 노출 정도로는 크게 문제를 일으키지 않습니다.

그 밖에 VG에 대해 주의할 점
고 농도의 VG 액상은 점도가 높기 때문에, 코일의 수명을 가속화시킵니다. 슬러지도 고 PG 액상보다 더 빠르게 생기는 편이죠.
그래서 노틸러스류의 무화기나 이노 킨, eGO 등의 코일이 작은 무화기는 고 VG 액상에 적합하지 않습니다.

VG 액상을 베이핑 할 때 단점은 역시 또 건조함입니다. 일반적인 고 VG 액상은 증류수를 첨가해 점도도 덜어내고 건조함 또한 완화하지만
역시 고 PG 액상을 베이핑 할 때처럼 물을 자주 마시세요.

 

나에게 맞는 PG/VG 비율은?

이 질문에 대한 대답은 정해질 수가 없습니다. 취향의 문제이기 때문이죠.
단지 목적에 따라서 아래와 같이 분류할 수 있습니다.

목넘김: 강력한 목넘김을 원하는 사람이라면 고 PG 액상을 선호할 가능성이 높습니다. PG는 VG보다 향과 니코틴을 전달하는 데 있어 더 효과적입니다.

부드러움:VG 액상은 일반적으로 더욱 부드러운 목넘김을 표현합니다, 구름과 같은 단단하지만 부드러운(?) 연무를 발생시키는 것도 VG이죠.
또한 VG는 같은 비율의 PG보다 더 많은 연무를 생성합니다. 고 VG 액상은 점도가 높아 코일에 액상 유입이 더디기에 적정 와트, 볼트로 베이핑 하세요.

스텔스 베이핑: 몰래 숨어서 베이핑 해야 하는 안타까운 베이퍼라면, 무화량이 크지 않은 고 PG 액상을 선택하세요.

클라우드 체이싱: 해마다 규모가 커지고 있는 베이핑 트렌드는 클라우드 체이싱입니다. 많은 무화량과 세밀한 연무를 뿜는 것이죠. 당연히 고 VG 액상을 선택해야 합니다.

 

결론

PG와 VG에 대한 기본적인 질문에 대한 해답이 되었기를 희망합니다.

각기 다른 장점과 단점을 지니고 있으니 어떤 비율의 액상을 선택할지는 개인의 취향이죠.

아예 처음 시작하시는 분이라면 PG/VG 비율이 50/50인 것으로 시작해보고. 이후에 자신의 선호에 따라 다른 액상으로 옮겨 가보시 기를 권합니다.

과일과 음료 향료는 PG와 잘 어울리는 편이고, 크리미한 커스터드류, 요구르트류는 VG와 어울리는 편입니다.

하지만, 무엇을 선택할지에 대한 정답은 없습니다. 자신의 미각을 따르세요!

 

원문글을 번역했습니다

  1. Whan 2017.08.16 12:16 신고

    전자담배 2주차인데 가슴답답함 때문에 검색해서 들어왔는데 pg때문일수도 있고 그냥 기존 연초담배 금단현상일수도 있다는거군요?


Dr Farsalinos 의 글을 일부 번역하였습니다


전자담배에서 포름알데히드(formaldehyde) 검출 : 연구실의 측정 결과와 현실과의 차이에 관하여

전자담배 실험에서 요즘 모드(Modular) 기기를 사용해 연구를 진행하는 곳이 생기기 시작했습니다. 아토마이저(Atomizer, 무화기)에 높은 전력을 주고 이후에 증기에서 검출되는 알데히드(Aldehyde, 대부분 포름알데히드)의 양을 측정하는 것이죠. 2014년에 처음 시작됐던 이 연구는, 일본에서도 실험이 되었고, 가장 최근에는 미국에서 연구가 되었습니다.

연구자들은 볼트를 조절할 수 있는 기기와 특정 무화기를 사용해 3.3v와 5.0v에서 각각 약 4초 동안 증기를 배출시켰습니다. 3.3볼트에서는 포름알데히드를 검출하지 못하였지만, 고 볼트인 5.0볼트에서는 포름알데히드가 검출되었고 이 수치는 무려 일반 연초담배의 15배였습니다.


하지만 이 연구에서는 대단히 잘못된 부분이 있었죠


먼저, 연구자들은 formaldehyde(포름알데히드)를 검출한 것이 아닙니다. formaldehyde hemiacetals(포름알데히드 헤미아세탈)를 검출한 것이죠.


formaldehyde hemiacetals(포름알데히드 헤미아세탈) 은 포름알데히드와 알코올이 결합한 물질(formaldehyde-propylene glycol(포름알데히드 프로필렌글리콜 또는 formaldehyde-glycerol(포름알데히드 글리세롤))입니다.

연구자들은 이것이 포름알데히드를 방출한다고 설명하였지만, 이 보고서를 본다면 formaldehyde hemiacetals(포름알데히드 헤미아세탈)은 포름알데히드 방출인자가 아닙니다. 그리고 hemiacetals(헤미아세탈)은 독성물질이 아니며, 발암물질이라고 보고된 바는 전무합니다.
사실은 hemiacetals(헤미아세탈)은 포름알데히드로 인한 세포 손상을 막을 가능성이 있기도 하죠.


이 연구의 또 다른 문제점은 볼트로만 표시했지 몇 와트인지는 언급을 하지 않았다는 것입니다.

하지만 보고서의 내용에 따라 추측해보면

5mg의 액상이 3.3볼트에서 기화되었다 하였습니다. 이 정도는 대략 6-7와트에서 4초 동안의 흡입시 사용되는 양이죠. 그리고 무화기의 저항은 약 1.6에서 1.8옴 정도로 추측됩니다. 따라서 5볼트는 약 14~16와트를 사용해야 합니다. 하지만 5볼트를 견디는 코일은 시판되는 것 중에 굉장히 드문 편입니다 (노틸러스?)


굉장히 발열된 상태의 무화기를 가치고 테스트를 거쳤기 때문에, 많은 양의 포름알데히드가 검출되는 것은 당연한 일이죠.
Dry puff(드라이 퍼프)는 상당수의 베이퍼가 경험하지만, 탄 맛이 나 액상의 맛이 변하기 때문에 지속하는 경우는 없는 편입니다.

따라서 이 같은 상황에서 베이핑을 계속하는 베이퍼는 없다고 봐도 무방하죠.

연구결과는 사실입니다만, 이 연구는 마치 탄 고기를 먹는 사람은 발암물질에 크게 노출된다는 것과 다를 바가 없습니다. 사실은 탄 고기를 계속해서 먹는 사람이 어디 있나요?

Ecigs, Water Vapour and The Lungs: Should You Be Concerned?


전자담배의 증기로 인해 폐에 물이 차거나, 세균감염의 위험이 있을까?

행간에 돌던 말이죠. 몇몇 사람들이 지금도 주장하는 것이고요. 이 때문에 일부 흡연자들은 전자담배를 사용하지 않고 있습니다, Public Health England(영국 보건부)가 일반 연초담배보다 최소한 95% 덜 유해하다고 발표하는데도 불구하고요.

아래는 최근에 제가 받은 이메일입니다.

"안녕하세요
바쁘실 텐데 죄송하지만 여쭙고 싶은 것이 생겨서 연락드립니다
최근에 COPD(Chronic Obstructive Pulmonary Disease, *만성폐쇄성 폐 질환[각주:1]) 진단을 받았습니다, 주치의는 당연히 금연을 하라고 말씀하셨고요.

제가 담당 전문가에게 전자담배에 대해 물어보았을 때, 그분은 아무리 전자담배가 95% 덜 유해하더라 하더라도
증기의 흡입은 폐의 바닥에 물웅덩이(a pool of water)를 생성하고 세균의 번식에 이로운 환경을 만들어주기 때문에 전자담배의 사용에 반대하셨습니다

당신(전자담배 유통회사)은 이 부분에 대해서 어떻게 생각하시는지 물어보고 싶습니다
경험적으로 느낀 것이라도 괜찮습니다. 연초 담배를 50년 이상 피운 사람이라 한 번에 금연하기가 쉽지가 않군요"


저는 단지 전자담배를 판매하는 사람이기 때문에 의학적인 부분에서는 조언해드릴 수는 없을 것 같습니다.
그래서 Riccardo Polosa 교수에게 물어보았습니다

Riccardo Polosa 교수는 호흡기 내과, 알레르기 내과 전문가이자 토바코 중독 전문가입니다.
또한, Lega Italiana Anti Fumo(LIAF, 이탈리아 금연 협회)의 Chief Scientific Advisor(과학 기술 보좌관)으로 있으며
세계적으로 전자담배의 전문가로 꼽히는 사람입니다

아래는 그가 답변한 이메일입니다.

"말도 안 되는 소리입니다, 그리고 COPD 치료를 위해 사용하는 네블라이저(호흡기)가 전자담배보다 폐에 더 많은 수증기를 가져다줍니다.

저희는 COPD 환자들을 대상으로 전자담배의 사용에 대해 이미 연구를 진행한 적이 있습니다.
그리고 해당 연구로부터 호흡기 질환은 전자담배의 증기로 인해 발생하는 경우가 전혀 없음을 밝혀냈습니다
또한 연초담배를 끊고 전자담배를 사용한 환자들에게서 전반적인 호흡기 부분에서의 향상이 있었습니다.

더구나, 에어로졸 형태의 프로필렌글리콜(PG)는 세균 증식을 억제하는 항균성, 항바이러스성이 있기 때문에 오히려 호흡기 질환을 예방하는 효과가 있습니다. 아이러니하게도 전자담배의 사용은 COPD 예방에 효과적인 방법이라고 볼 수도 있죠"

  1. *만성폐쇄성 폐 질환(COPD)은 원인이 되는 폐 질환이나 심장질환이 없이 기도폐쇄가 발생하여 기류의 속도가 감소하는 질환군을 말한다. 임상적으로는 만성적으로 객담을 동반하는 기침을 하는 만성기관지염과 종말세기관지(terminal bronchiole) 이하의 폐포들이 비정상적으로 늘어나고 폐포격벽이 파괴되는 폐기종이 혼합되어 양자 간의 구분이 힘든 경우, 이들을 총칭하여 COPD이라고 한다. COPD은 천식과 비슷하게 호흡곤란, 기침, 가래 등의 기도 질환 증상을 나타내다가 폐 기능을 악화시켜 사망에 이르게 한다. 발병 원인은 90% 이상이 흡연 때문인 것으로 알려져 있고 이외에 공해와 선천적 질환, 호흡기 감염증 등이 있다. COPD는 사망률 세계 4위, 국내 7위의 질병이다. [네이버 지식백과] 만성폐쇄성폐질환 [COPD] (시사상식사전, 박문각) [본문으로]


BBC E-Cigarettes: Miracle or Menace? / BBC 전자담배: 기적인가 위협인가?


기존 '남촌동 전자담배' 님이 제작하셨던 자막에 기반을 둬 일부 오역된 부분, 미처 매끄럽게 번, 의역되지 못한 부분을 수정했습니다


오랜만에 쓰는 글이네요, 대학생활이 바쁘긴 한가 봅니다, 노는 것도 바쁘고요ㅋㅋ

  1. Whan 2017.08.16 13:17 신고

    재미있게 잘봤습니다.
    역시 전자담배도 끊는게 가장 좋겠네요

Language : AutoHotkey

Author : 예지력

Feature : Spawn child process using pipe


DynaScript.zip


블로그 방명록에 어떤 분이 흥미로운 댓글을 남겨주셔서 만들어보았습니다



Quasi Thread 라고 부를수도 있을라나?

코드를 현재 스레드의 자식(Child) 프로세스로 메모리에서 실행시킵니다




'프로그래밍 > Archive' 카테고리의 다른 글

Dock - attach a window to another  (1) 2017.04.23
DynaScript - Child 프로세스로 코드 실행  (27) 2015.12.14
[Lib] Class Msgbox  (6) 2015.11.27
[Lib] CleanNotify  (4) 2015.11.21
WinWaitCreated()  (0) 2015.10.17
MS Office Style Gui 프로토타입  (3) 2015.10.09
  1. 열쇠 2015.12.14 18:27 신고

    예지1에
    #NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
    ; #Warn ; Enable warnings to assist with detecting common errors.
    SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
    SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.

    이 문구만 있는데 따로 수정을 해야 되나요?
    간단한 예제좀 부탁드립니다.

    • BlogIcon 예지력 2015.12.14 18:41 신고

      아 파일을 잘못 올렸었어요! ㅋㅋ
      지금 수정했습니다, 다시 받아보세요
      예제1, 2 둘다 확인해보시면 될거에요
      서브 프로세스로 오토핫키가 2개가 실행되는걸 확인하실 수 있을거에요

    • 열쇠 2015.12.14 19:29 신고

      넵 어쩌다가 디컴파일 얘기로 빠졌는데..
      예지력님께서 말씀하신것도 enigma 다른 플러그인 세팅으로 메모리를 지울수가 있어서 괜찮을듯 싶습니다.

  2. 열쇠 2015.12.14 18:43 신고

    안녕하세요. 다소 난해할수 있는 질문 하나 드립니다.
    http://www.2shared.com/file/dHtQEZ62/w_online.html
    //
    #Persistent
    #SingleInstance Force
    ptr := A_PtrSize ? "ptr" : "uint"
    len := DllCall("enigma_ide.dll\EP_ProtectedStringByID", "int", 1, ptr, 0, "int", 0)
    if (len > 0)
    {
    VarSetCapacity(str, len*2, 0)
    len := DllCall("enigma_ide.dll\EP_ProtectedStringByID", "int", 1, "str", str, "int", len)
    if (len > 0)
    PW = %str%
    }
    msgbox, 괄호안에 문구는 Enigma의 변수 스트링 입니다. `n(%pw%)
    //
    해당 스크립트로 컴파일 후 enigma라는 프로그램을 이용해 pw라는 변수에 msgbox,okay를 보관하도록 하였습니다.
    이때 예지력님께서 올려주신 스크립트를 통해 변수pw의 본래 스크립트는 msgbox,okay를 실행하려면 어떻게 해야 되나요?

    • BlogIcon 예지력 2015.12.14 18:51 신고

      예제까지 적었는데 확인해보시죠!?
      제가 코드를 다 만들어드리지는 않습니다

      정말 도움을 받고 싶으시면, 저 스크립트가 뭐 하는 건지부터 설명을 해주시는 게 먼저 할 일 같습니다
      ProtectedStringByID 리턴값이 뭔가요?

    • 열쇠 2015.12.14 18:56 신고

      해당 스크립트는
      enigma protect라는 프로그램을 이용해 Protected Strings에 보관해놓은 글자를 호출하는 스크립트 입니다.
      해외에서는 오토핫키의 소스 유출을 방지하고자 ahk에 본래 스크립트를 적용하지 않고 enigma protect의 Protected strings에 본래 스크립트를 변수로 저장해 저런식으로 따로 변수를 호출해서 실행하는 방법을 사용하고 있습니다. 근데 영문 포럼인지라 쉽게 따라할수가 없어 여기에 질문을 남겨두었습니다. ProtectedSTringById는 Protected Strings를 사용하려면 Enigma protector에서 플러그인을 체크 해야되는데 아마 해당 플러그인을 콜하는 부분인것 같습니다.

    • 열쇠 2015.12.14 18:59 신고

      포럼 주소는
      https://autohotkey.com/board/topic/82590-code-protection/page-2
      입니다.

    • BlogIcon 예지력 2015.12.14 19:15 신고

      근데 디컴파일러로 바로 보이는데요?
      마지막 Uberi 포스트 확인해보세요

    • 열쇠 2015.12.14 19:21 신고

      디컴파일을 통해서 해당 오토핫키의 스크립트는 찾을수 있으나
      enigma에 저장해놓은 변수 스크립트는 찾을수 없습니다.
      중요한건 Enigma의 변수 스크립트인지라..

    • BlogIcon 예지력 2015.12.14 19:26 신고

      아뇨 str으로 받아오고 그걸 DynaScript의 어규민트로 날려야하는데
      그러면 메인 스래드의 메모리에 str이 보여요!
      @_@

    • 열쇠 2015.12.14 19:30 신고

      네 그것도 맞습니다.
      다만 enigma의 다른 플러그인으로 예지력님께서 말씀하신걸 방지가 가능한지라.. 어쩌다가 보안쪽 얘기로 빠져버렸네요;;

    • BlogIcon 예지력 2015.12.14 19:37 신고

      읽어보니 해시가 풀리면 len이 0이상으로 나온다는거 같고, 리턴값이 str으로 나오네요. 그러면 처음에 enigma에 key 값에 스크립트 적어두고 리턴 str을 DynaScript로 보내시면 될 거 같아요. 근데 이러면 서브 프로세스를 메인함수처럼 실행시킨다는건데 이러면 AutoHotkey.exe 통해 가는거라 보안상태가 없는데 @_@...enigma 로 뭐를 막으시겠다는건가요? 서브프로세스는 패킹이 안되있는건데

    • 열쇠 2015.12.14 19:44 신고

      아 autohotkey.exe를 경유해서 실행이 되는 거였네요..

    • BlogIcon 예지력 2015.12.14 19:48 신고

      오토핫키는 다 AutoHotkey.exe를 통해서 가요, 인터프리터, 스크립트 언어니까요.
      컴파일하는것은 ahk파일과 exe파일을 wrapping하는거고요, 그래서 엄밀히 말하면 컴파일이 아니죠
      그러니까 소스코드보안에 신경쓰는게 의미가 없게 되는거죠,
      패킹해봤자 메모리에 로드되면 AutoHotkey.exe 머신에서 실행되는거라 코드가 메모리에 로드되어있습니다. 디컴파일은 프로그램을 로딩하고 하는거에요. 그냥 디컴파일러로 프로그램 드래그드롭하는게 아니고요.
      오토핫키 개발자 fincs도 오토핫키의 소스코드는 절대로 보호되지 않고, 소스코드 보안글도 포럼에서 그만좀 올리라고 했습니다ㅋㅋ 아무런 의미가 없으니

      무슨 패커을 사용해도 보안에는 의미가 없어요, 올리디버거, Sylldbg로 브레이크포인트 걸면 메모리에서 코드가 다 보이는데 패킹해봤자죠

    • 열쇠 2015.12.14 19:57 신고

      정말 안타까운 사실이네요.
      그래도 이런식으로 외부 프로그램을 이용하면 메모리를 지울수도 있습니다.
      http://www.2shared.com/file/gU44Uy-k/test.html
      간단한 역분석 방지와 메모리를 커널에서 호출해서 지우도록 해보았습니다.

    • 열쇠 2015.12.14 20:01 신고

      외담입니다만 fincs는 왜이렇게 극단적으로 오픈웨어를 지향하는걸까요?
      정책에 반해서라도 따로 컴파일러를 만들어 주었으면 좋겠습니다. 아마 수많은 오토핫키 스크립터들이 바라는 사항이 아닐까 싶네요

    • BlogIcon 예지력 2015.12.14 20:26 신고

      오토핫키 시작 자체가 가장 엄격한 오픈소스를 지향하는 GNU라이선스였고, 오토핫키 베이직(B) 버전의 출발도 형제 언어인 오토잇이 오픈소스라서 가능했고요. 현재의 오토핫키(L) 가 아직까지 개발되는 이유도 6년 전에 개발이 중단됐던 오토핫키 베이직(B)이 오픈소스여서 가능한 거니까요.

      외국에는 이미 국내보다 오픈소스 정신과 오리지널 코드의 제작자를 크레딧을 해주는 문화가 발달해서 그런지, 오토핫키 정책에 불만이 사람 별로 못 본 것 같습니다, 저 자체도 오픈소스의 수혜를 많이 받으며 공부해와서 그런지 별 생각 없고요.
      다만, 몇몇 도둑(?)들 때문에 소스 보호에 신경을 쓰게 될 때가 있다는 점이 안타까워요

    • 열쇠 2015.12.14 20:49 신고

      그렇군요..오토잇처럼 최소 Obfuscation 기능이라도 있으면 좋겠지만..말씀 잘들었습니다.

  3. 박세준 2015.12.21 08:26 신고

    예전부터 생각해왔던건데 진짜로 하시는 분들이 있네요..ㅋㅋ
    오핫 스크립트 에디터같은 프로그램 만들 때 유용할 것 같습니다.
    저는 ahk2exe 컴파일러를 FileInstall로 내장시켜서 FileAppend -> ahk2exe -> run 을 생각하고 있었는데 차원이 다른 작품이 나와버렸네요~

  4. 왕진 2015.12.22 22:57 신고

    예지력님글도보고 구글사이트에 다른분의 오토핫키 강좌도 보고 해서 이미지서치를 해보는중입니다.
    실례가안된다면 몇가지 질문을 드리고싶습니다.

    Gui, ADD, Text, x30 y5 w110 h20, 매크로 프로그램
    Gui, ADD, Text, x60 y25 w50 h20 vA, 준비!!!
    Gui, ADD, Text, x60 y50 w50 h20 vB, 0회
    Gui, ADD, Button, x20 y80 w110 h20, 시작
    Gui, ADD, Button, x20 y110 w110 h20, 종료
    Gui, Show

    return

    Button시작:
    {
    CoordMode, Relative
    Gui,Submit,nohide
    GuiControl,,A, 시작

    매크로시작 := true
    클리어횟수 := 0
    Loop
    {

    ImageSearch, FoundX, FoundY, 0,0, A_Screenwidth, A_ScreenHeight, *50 %A_ScriptDir%\Image\1.png
    if(Errorlevel = 0)
    {
    send {click &FoundX& %FoundY%}
    sleep, 3000
    }
    ImageSearch, FoundX, FoundY, 0,0, A_Screenwidth, A_ScreenHeight, *50 %A_ScriptDir%\Image\2.png
    if(Errorlevel = 0)
    {
    send {click &FoundX& %FoundY%}
    sleep, 3000
    }
    ImageSearch, FoundX, FoundY, 0,0, A_Screenwidth, A_ScreenHeight, *50 %A_ScriptDir%\Image\3.png
    if(Errorlevel = 0)
    {
    send {click &FoundX& %FoundY%}
    sleep, 3000
    클리어횟수 := 클리어횟수 + 1
    Gui,Submit,nohide
    GuiControl,,B, %클리어횟수% 회
    }
    if(매크로시작 = false)
    {
    break
    }
    }
    }
    return

    Button종료:
    {
    매크로시작 := false
    ExitApp
    }
    return

    제가 이미지서치를 하려고 만든것인데..
    이미지를 못찾는건지..어떤지..다른건다되는데 이미지서치만 안됩니다...
    예지력님강좌에있는것처럼 vx,vy 좌표로해서도해보고 foundx,foundy로도해봤는데..
    도통..이미지를 못찾는것 같아요..

    질문1. 코드에 문제가 있는건가요..?
    질문2. 코드에 문제가 없다면 혹..이미지를캡쳐하는 부분에서 잘못된것일까요?
    ->캡쳐는 그림판으로해서 png,bmp파일로 했으며 캡처는 가장알아보기쉬운 부분적으로하였습니다.어느글에서보니 가장자리?하는게좋다고하여그렇게도해보고 정가운데로도 해봤지만..여전히 움직이질않네요..
    질문3. 제가 노트북을쓰는데..지금2모니터를 사용합니다. HDMI로 하나 RGV로 하나 오토핫키는 HDMI쪽 모니터를 주로 설정하여
    그곳에서하는데 혹 듀얼모니터사용하는게 문제가 될수 있을까요?
    질문4. 파일경로쪽에%A_scriptdir%\Image\1.bmp or png 이렇게 사용하는데
    파일은 바탕화면 ppp 폴더안에 스크립트가 있으며 하위폴더인 Image 폴더안에 찾고자하는 파일3개와 그파일로 캡쳐뜬 사진3개가
    있습니다 이럴때 코드 경로는 저위에 코드가 맞는건가요?

    질문이 많습니다ㅠㅠ도와주세요!!

    • 2016.01.10 22:53 신고

      너무 기초적인 내용인데 포스팅과는 맞지않는거 같네요
      킴영감님 포스팅보고 따라하신거같은데 foundx변수에
      &가 아닌 %를 주셔야합니다.

  5. 구리 2016.01.01 01:57 신고

    안녕하세요^^
    독립 프로세스로 명령을 시켰더니 잘 되는 명령어도 있고 잘 안되는 명령어도 있네요.ㅜㅜ
    msgbox,send 같은 명령은 잘 실행되는데
    Run Notepad.exe
    Winclose
    이런 명령들은 (Run 같은경우 파일을 찾을 수 없다고 나옵니다.)
    (Winclose는 반응이 없습니다.)
    잘 실행되지 않네요.ㅜㅜ

    어떻게 해야 위와 같은 명령도 잘 실행되게 할 수 있을지 모르겠습니다.
    알려주시면 정말 감사하겠습니다.

    새해 복 많이 받으세요!

    • BlogIcon 예지력 2016.01.01 18:44 신고

      저는 잘 되는데요? :(

      Code := "
      (Join`n
      Run, Notepad.exe
      )"

      Init := new DynaScript(Code)
      Init.Run()
      Return

      #Include, <DynaScript>

  6. 구리 2016.01.03 14:55 신고

    왠진 모르지만 run 이후 공백(`n)을 살려놨더니 잘 되네요.^^;;

    덕분에 좋은 스크립트도 써보고 감사합니다.!

  7. BlogIcon 비필 2016.02.15 15:51 신고

    이거 AutoHotkey_H 나 AutoHotkey.dll 로도 해결 가능합니다. 서로 변수공유도 가능하고요

  8. BlogIcon 1466005116 2016.06.16 00:38 신고

    알찬 정보 좋네요~

  9. 2016.09.16 20:11

    비밀댓글입니다

Language : AutoHotkey

Author : 예지력

Feature : MSDN TaskDialog function implement, written in AHK


Class MsgBox.zip





'프로그래밍 > Archive' 카테고리의 다른 글

Dock - attach a window to another  (1) 2017.04.23
DynaScript - Child 프로세스로 코드 실행  (27) 2015.12.14
[Lib] Class Msgbox  (6) 2015.11.27
[Lib] CleanNotify  (4) 2015.11.21
WinWaitCreated()  (0) 2015.10.17
MS Office Style Gui 프로토타입  (3) 2015.10.09
  1. 혜나토리 2015.11.27 22:57 신고

    오늘부터 연습하는데 정말 큰 도움됩니다 감사합니다^^

  2. 세준 2015.12.11 11:04 신고

    이제 스타일 변경 없이도 깔쌈한 메세지박스가 가능하겠네요~! 완전 맘에드네요 ㅋㅋ

  3. 불탄집문서 2015.12.19 15:35 신고

    오오 .. 감사합니다 이제 이쁜 msgbox를 만들수 있게 되었어요

  4. 왕초보 2017.05.15 09:36 신고

    오래전에 어느 고수님의 백업, 복구 프로그램에 있는것을 보고 신기하게 생각을 하였었습니다..
    오토쿨에서 보고서야..어느분께서 만드신 메세지인지 알게 되었습니다
    그리고.이제서야.활용할수 있게 되었습니다..감사합니다..

    오토쿨에서 도움을 청하는것이 아니라 이곳에서 도움을 청해게 되어서 죄송합니다.
    이 메세지를 오토잇에서도 활용을 하고 싶습니다...초보가 좋은것을 알게 되다보니 너무 욕심을 내는것 같습니다
    혹시...오토잇으로도 사용가능한지요...어떻게 작업을 해야할지 엄두가 나지를 않다보니..이렇게 도움을 청하게 되었습니다

    오토핫키 관련해서 좋은 강좌를 해주셔서 감사합니다..
    많은 도움이 되었습니다
    특히 스킨은...모양을 이쁘게하는데 잘 사용하였습니다..
    감사합니다..

    • BlogIcon 예지력 2017.05.15 09:43 신고

      안녕하세요,
      오토핫키의 기능이 아니라 윈도우 내장함수를 끌어다 쓰는 것이라(DllCall) 오토잇도 dllcall이 있는 걸로 알고 있는데 가능할 듯 싶습니다. 저는 오토잇 코드를 읽을 줄만 알지 직접 쓸 줄은 몰라서 도움은 못 드리겠어요.

  5. 왕초보 2017.05.24 09:04 신고

    댓글을 남겨 주셔서 감사합니다..

    메세지에 칼라가 있는것을 보고 너무 제 욕심만 낸것 같습니다...죄송합니다..
    친절하신 답글에 제가 자신이 민망할 정도입니다..

    오토잇으로 된것을 찾기는 하였습니다..역시..칼라가 들어가지 않았지만 저에게는 귀한 선물이 되었습니다
    메세지가 윈도우의 어떤 내장함수인지를 여기서 알게되지 않았다면...찾지 못하였을것입니다.
    --------------------------------------------------------------------------------------------------------------------------------------------------
    윈도우 백업, 복원 프로그램에 메세지를 활용하여서 사용하고 있습니다...
    초록은 복원, 백업은 노랑을 사용합니다
    칼라에 따라서 아이콘이 정해져 있다보니..조금 아쉽습니다..
    칼라가 적용되는것만 해도 특별한 것인데도 사람이 욕심이 끝이 없나 봅니다..

    아이콘을 파일로된 다른 아이콘을 적용을 하려고하면 어떻개 해야하는지요..
    초보에게는 능력 밖의 일이되어서 이렇게 또 귀찮게 해드리게 되었습니다..
    죄송스럽습니다.

    오늘도 웃음이 가득한 하루 되시길 바랍니다

Language : AutoHotkey

Author : 예지력

Function : 팝업메시지


라이브러리


예제 코드


'프로그래밍 > Archive' 카테고리의 다른 글

DynaScript - Child 프로세스로 코드 실행  (27) 2015.12.14
[Lib] Class Msgbox  (6) 2015.11.27
[Lib] CleanNotify  (4) 2015.11.21
WinWaitCreated()  (0) 2015.10.17
MS Office Style Gui 프로토타입  (3) 2015.10.09
GetActiveObjects 활성중인 객체를 불러온다  (0) 2015.03.04
  1. 2015.11.21 20:21

    비밀댓글입니다

  2. 세준 2015.12.11 11:07 신고

    깔끔한게 마음에 드네요 ^^ 이제 구린 TrayTip 말구 이걸 쓰면 이뻐질듯!!

  3. 왕초보 2017.05.23 17:59 신고

    역시..저에게는 한글 설명이 최고입니다..
    멋진 작품에 친절하신 설명에 감사드립니다..

    좋은일만 있으세요..

  4. 왕초보 2017.05.24 09:08 신고

    알려주순 멋진 메세지를 백업, 복구 프로그램에 적용을 하여 보았습니다..
    바탕색이 프로그램 색과 일치하지 않아서 색은 바꾸었습니다. 죄송합니다

    알려주신 소스에서 페이트 관련소스가 있어서 처음으로 프로그램 폼에..페이드 기능을 적용도 해볼수 있었습니다
    생각지도 않았던 기능이어서...너무 감사드립니다..

    윈도우 포럼에 사용기를 소개를 하였지만 이곳에는 사진을 올릴수 없어서 오토쿨에 강죄를 해주신곳에 사진 몇장을
    올렸습니다

    좋은 작품을 이렇게 공개를 하여 주신 덕분에 많은것을 배울수 있었습니다
    진심으로 머리숙여 감사드립니다..
    복 많이많이 받으십시요

 

요즘 바쁜 와중에도 짬 내서 구글의 Go 언어 공부하느라 더 정신은 없지만 재밌네요
하지만 아직까지도 저는 오토핫키를 가장 선호합니다, 처음 배운 언어고 가장 많이 사용하고 있어서 그런지...
인터프리터 언어의 일인자(?)인 파이썬보다도 더 자주 사용하는 거 같네요

 

클래스에 대한 글을 작성하려 했는데, 먼저 함수에 대해 충분히 알아야 할 것 같아서 이 글을 먼저 적게 되었습니다
함수를 사용하긴 하더라도, 제대로 활용하는 사람은 드문 것 같아서요

 

사실, 저도 잘 모릅니다;;
하지만, 더 배우고자 한다면 남을 가르치는 것이 도움이 된다고 했나요?
제가 함수에 대해 아는 것을 적어보려고 합니다

 

안내
- 저는 오토핫키를 포함한 다른 프로그래밍 언어를 모두 원어로 배워서, 한글 명칭을 잘 모릅니다... 대부분 영어로 적습니다
- 예제를 직접 실행해보세요, 이해에 많은 도움이 될 겁니다

 

Function 함수

 

일단 함수를 왜 사용하는지 알아야 겠죠, 함수를 사용하는 주된 이유는

  1. 코드의 유지 보수를 수월하게 하고
  2. 코드의 범용성을 높이고
  3. 생산성이 높아지기 떄문입니다

함수를 사용하는 이유가 goto, gosub 의 사용을 권장하지 않는 이유이기도 합니다
한두 개라면 몰라도 서브루틴에 대부분 goto를 사용한다면 코드가 굉장히 지저분(...) 하고
범용성이 제로에 가까워서, 새로 코드를 작성할 때 이전의 코드가 전혀 도움이 안 되죠

물론 대충 후다닥 만들때는 그냥 goto 로 만드는게 편하죠, 나중까지 생각한다면 함수로 만드는게 좋고요


Function (이하 함수)는 goto, gosub 과 같은 서브루틴(subroutine)의 기능에 추가로 파라미터(입력)을 받아 올 수 있습니다
그리고, 값 (value)을 리턴(Return) 할 수도 있죠.
아래 '더하기' 함수는 x, y 파라미터를 받아와 각각 더하고 합을 리턴합니다

 

더하기(x, y)
{
    return x + y
}

 

'더하기'는 함수 이름이고, 괄호 안에 들어가는 x 와 y는 파라미터라고 부릅니다


이렇게 함수를 만드는 것을 Function Definition (함수 정의)라고 하는데요

 

'더하기' 함수를 사용하려면 반드시 x, y 파라미터에 해당하는 각각의 값을 보내줘야 하고
리턴되는 값을 변수에 저장하려면 ' := ' 오퍼레이터를 사용해야 합니다, 아래처럼요

 

합 := 더하기(10, 5) ; '합' 변수에는 '15'가 저장됩니다

 

값을 저장하지 않고, 아래처럼 그냥 함수만 사용할 수도 있습니다

 

더하기(10, 5)

 

그런데 '더하기' 함수에는 값을 리턴하는 외의 어떠한 명령도 없기 때문에 위 코드는 아무런 의미가 없죠
하지만 명령어(Command)를 사용할 때에는 유용합니다
변수로 저장해두고 계속 사용하지 않을 거라면, 아래처럼 사용하면 되죠

 

MsgBox % "3 더하기 2 는: " . 더하기(3, 2) ; ' 3 더하기 2는: 5 '

 

함수는 파라미터를 포함해 모든 표현을 *익스프레션으로 표현합니다

익스프레션: 변수, % 변수, :=, "문자"

 

따라서, 변수를 넘길 때는 따옴표("") 처리 없이, 문자를 넘길 때는 "문자 "로 표현해야 합니다

 

함수(변수, "문자 ")

 

Parameters 파라미터

 

함수명(첫 번째 파라미터, 두 번째 파라미터, 세 번째 파라미터, ...) 과 같은 형식으로 함수를 정의합니다
파라미터는 필수가 아니에요, 생략하고 함수명()로 정의할 수도 있습니다

 

ByRef 파라미터
함수가 받아온 파라미터는 기본적으로 로컬(Local) 변수로 사용됩니다, 하지만 *ByRef 파라미터로 받아온다면 그렇지 않죠

ByRef: By Reference의 약자, 참조한다는 뜻

 

무슨 말인지 모르시겠다고요?, 아래의 예를 읽다 보면 이해가 될 거예요 :)

 

Swap(ByRef x, ByRef y)
{
    save := x
    x := y
    y := save
}

 

Swap 함수는 ByRef 파라미터의 사용으로 파라미터 x, y를 *Alias로 만듭니다

Alias: 이후에 작성할 멀티 스레드 글에서 자세히 알아보겠습니다, 지금은 그냥 이런 게 있구나 정도만 생각하세요

 

쉽게 말하면, ByRef를 사용함으로써
파라미터 x, y는 Swap 함수 내에서도, 코드 전체에 걸쳐서도 같은 데이터를 메모리에서 참조(Refer) 하게 되는 거죠
따라서 Swap 함수로 교환된 값을 함수 밖에서도 사용할 수 있습니다

 

만약에 ByRef를 사용하지 않는다면
함수 내에서는 x, y 값을 교환해서 저장하지만, 함수 밖에서는 아무런 변화가 없습니다
따라서, 코드 전체에서는 실제로 교환된 값을 사용할 수는 없습니다

 

말이 점점 어려워지네요, 역시 코드가 제일 쉽죠?

 

; ByRef 의 경우
a := 10
b := -10
MsgBox % "a : " a "`nb : " b ; a는 10, b는 -10
Swap(a, b) ;a 변수의 값은 b로, b변수의 값은 a에 저장됨

MsgBox % "a : " a "`nb : " b ; a는  -10, b는 10 로 값이 교환됨

 

Swap(ByRef x, ByRef y){
    save := x
    x := y
    y := save
}

 

; ByRef 가 없다면
a := 10
b := -10
MsgBox % "a : " a "`nb : " b ; a는 10, b는 -10
Swap(a, b)
MsgBox % "a : " a "`nb : " b ; 여전히 a는  10, b는 -10

 

Swap(x, y){
    save := x
    x := y
    y := save
}

 

읽기만으로 이해가 잘 되지 않는다면 코드를 실행해보고 결과를 확인해보세요

 

ByRef 의 장점은 여러 개의 값을 *리턴하는 효과를 가져온다는 거죠, 위 코드에서는 x, y 두 개의 값을 리턴했다고 보면 됩니다
반면에, 리턴(Return)으로는 한 개의 값만 리턴이 가능해요

리턴하는 효과?: 엄밀히 따지면, ByRef는 값을 리턴하는 게 아니라 값을 설정한다고 봐야 하기 때문

 

ByRef의 또 다른 장점으로는,
사이즈가 큰 문자열을 리턴할 때 return String 을 사용하는 것보다 속도가 빠르다는 점이 있습니다
웹페이지 소스나, json 파싱을 할 때 유용할 것 같지만,
속도 차이는 벤치마킹상이지, 사람이 체감하는 속도는 아니라서 막상 사용은 잘 안 합니다


옵션 파라미터

함수를 호출할 때마다 모든 파라미터에 값을 넘기려니 귀찮은 때가 많습니다
그럴 때, 파라미터에 기본값을 설정해두면 편하죠, 이러한 파라미터를 Optional Parameter (옵션 파라미터)라고 불러요

 

더하기(x, y, z := 0)
{
 return x + y + z
}

 

더하기 함수의 3번째 파라미터 z는 기본값이 0으로 설정된 옵션 파라미터입니다
파라미터를 받아오지 않는 경우에는 0으로 설정되고, 받아온 경우에는 받은 값을 사용합니다
따라서, 더하기(5, 5) 의 경우에는 10, 더하기(5, 5, 5) 의 경우에는 15 가 리턴됩니다

 

다시 한번: 함수는 모든 표현을 익스프레션으로 한다고 했습니다, 그래서 z = 0 이 아닌, z := 0 을 사용하죠
그럼에도 불구하고 아직까지는 베이직 버전에서 이동한 개발자를 위해 ' = ' 도 허용됩니다


Variadic 파라미터

파라미터의 개수를 유동적으로 설정하고 싶은 경우가 많습니다, 특히 연산 작업을 할 경우에는 더욱 그렇죠
파라미터 이름 뒤에 * 처리를 하면 입력받은 파라미터의 개수만큼, 파라미터가 자동으로 설정됩니다

 

MsgBox % 더하기(10) ; 10
MsgBox % 더하기(10, 10) ; 20
MsgBox % 더하기(10, 10, 10) ; 30

 

더하기(params*) {
    for i,p in params
  Sum += p
    return Sum
}

 

리턴 Return

 

위에서 잠깐 설명했듯이 함수는 리턴 값을 호출자(Caller)에게 보내거나/저장할 수 있습니다

 

Test := returnTest() ; 변수 Test에 리턴값 123 저장
MsgBox, % Test

 

returnTest() {
  return 123
}

 

return 은 한 개의 값만 리턴할 수 있는 반면에 ByRef를 사용하면 여러 개의 값을 리턴하는 효과가 있다고 했죠?
오브젝트나 배열을 생성해 리턴해도 동일한 효과를 얻을 수 있습니다

 

Test := returnArray()
MsgBox, % Test[1] "`, " Test[2] ; A , B

 

returnArray()
{
 Test := ["A", "B"]
 return Test
}

 

로컬 변수 Local Variables

 

기본적으로 함수 내에서 사용되고, 생성하는 변수는 모두 로컬 변수입니다, 오직 함수 내에서만 사용되는 거죠
함수 밖 변수, 다른 함수의 변수와는 아무런 관련이 없어서, 이름이 동일해도 상관없습니다

 

로컬변수 := 1234
Add := 더하기(5, 5)
Sub := 빼기(10, 5)
MsgBox, % "함수 밖 로컬변수 - " 로컬변수 "`n더하기(5, 5) - " Add "`n빼기(10, 5) - " Sub

 

더하기(X, Y){
 로컬변수 := X + Y
 return 로컬변수
}

 

빼기(X, Y){ ; 파라미터가 X, Y 로 동일해도 상관없음
 로컬변수 := X - Y ; 이름이 동일해도 상관없음
 return 로컬변수
}

 

글로벌 변수 Global Variables

 

함수 밖에서도 변수를 사용하려면 아까 설명한 ByRef 을 이용할 수도 있고
함수 내에서 변수의 레벨을 global로 설정하면 됩니다

 

글로벌변수 := 111
MsgBox % 글로벌변수 ; 111
Func()
MsgBox % 글로벌변수 ; 222

 

Func(){
 global 글로벌변수 ; 변수 '글로벌변수' 은 global 변수임
 글로벌변수 := 222
}

 

여러 개의 글로벌 변수를 설정하려면 global, 변수 1, 변수 2, 변수 3, ...으로
모든 변수를 글로벌 변수로 설정하려면 global 을 적어주면 됩니다

 

Func(){
 global 변수1, 변수2, 변수3, ... ; 변수1, 변수2, 변수3 을 글로벌변수로, 나머지는 로컬변수
 ...
}

 

Func(){
 global ;모두 글로벌 변수
 ...
}

 

스태틱 변수 Static Variables

 

스태틱 변수는 기본적으로 로컬 변수지만, 추가로 함수 내에서 계속해서 값이 기억된다는 점이 특징입니다
무슨 말인지 코드로 확인해볼까요?

 

일단, 로컬 변수부터 확인해보죠

 

MsgBox % 누적(1) ; 1, 누적안됨
MsgBox % 누적(10) ; 10, 누적안됨
MsgBox % 누적(100) ; 100 , 누적안됨

 

누적(X){
 aug += X
 return aug
}

 

숫자가 누적이 되지 않습니다, 위 코드에서 누적 함수의 aug 변수를 스태틱 변수로 설정하면 어떻게 될까요?

 

MsgBox % 누적(1) ; 1
MsgBox % 누적(10) ; 11
MsgBox % 누적(100) ; 111

 

누적(X)
{
 static aug ; 스태틱 설정
 aug += X
 return aug
}

 

숫자가 계속 누적돼서 나옵니다, 이처럼 스태틱 변수는 함수 내에서 값이 기억되어 사용되는 변수입니다
그래서 처음 1 이 기억되고, 거기다가 10을 더하고, 마지막으로 100을 더하는 거죠

 

여러 개의 스태틱 변수를 설정하려면 static, 변수 1, 변수 2, 변수 3, ...으로
모든 변수를 스태틱 변수 설정하려면 static 을 적어주면 됩니다

 

Func(){
 static 변수1, 변수2, 변수3, ... ; 변수1, 변수2, 변수3 을 스태틱변수로, 나머지는 로컬변수
 ...
}

 

Func(){
 static ;모두 스태틱 변수
 ...
}

 

글로벌 변수와 스태틱 변수를 구분해서 설정하려면 아래처럼 하시면 됩니다
global 글로벌 변수 1, 글로벌 변수 2, ...
static 스태틱 변수 1, 스태틱 변수 2, ..

 

함수 호출 Calling

 

함수 내에서도 함수를 호출할 수 있습니다, 예를 들어

 

ParentFunc()

 

ParentFunc(){
 return ChildFunc()
}

 

ChildFunc(){
 MsgBox, 안녕!
}

 

위 코드는 너무 간단해서 굳이 이렇게 쓸 필요는 없어 보입니다.
실제로 활용될 수 있는 아래 코드를 확인해볼까요?

 

Wait_img("img.bmp", true) ;이미지 찾을시 해당 이미지를 클릭하게한다

ClickFunc(1000, 500) ; 좌표 1000, 500 클릭

 

Wait_img(img, Click := false){
 while !ErrorLevel = 0 ; 이미지를 찾을 때까지
  ImageSearch, vX, vY, 0, 0, A_ScreenWidth, A_ScreenHeight, % A_ScriptDir . "\" img
 return ((Click == true) ? ClickFunc(vX, vY) : 0)
}

 

ClickFunc(X, Y){
 Click %X% %Y%
}

 

한 함수에 몰아넣으면 될 텐데 왜 이렇게 사용하냐고 물으신다면,
반복되는 서브루틴을 개별 함수로 나눠서, 각각의 함수의 범용성을 높이기 위해서죠. 코드도 단축되고요

 

((Click == true) ? ClickFunc(vX, vY) : 0) 가 뭐죠? c언어의 Ternary Operator 입니다, 오토핫키도 c로 작성된 언어라 모든 연산자와 표현식은 c 하고 똑같습니다
모르셨다면 if, else를 한 문장으로 축약하는 표현식이라고 알아두시면 됩니다
Click 파라미터가 true라면 이미지를 클릭하고, false 면 클릭하지 않습니다

 

함수 객체 Func Object

 

프로그래밍에 대해 관심을 가졌다면, 언젠가 객체지향언어라는 것을 들어보았을 겁니다
C++, C# 그리고 자바 등 요즘 사용되는 언어는 대부분 객체지향언어인데요
객체지향프로그래밍의 이유는 점점 프로그램의 규모가 커지고, 개인보다는 집단이 개발하는 오픈소스 소프트웨어가 많아지기 때문이기도 합니다
객체로 나눠서 작성하면 유지 보수가 수월하고, 다른 개발자가 코드 개발에 참여하기도 쉽죠

 

그리고 객체지향언어에서 객체를 동적(Dynamic)으로 컨트롤하는 언어를 프로토타입 지향 언어라고 하는데
이와 같은 언어로는 대표적으로 자바스크립트가 있고, 오토핫키가 있습니다(!!!)

이 부분은 나중에 작성할 클래스 글에서 다루도록 하고, 일단은 함수 객체로 바로 넘어가죠 사실, 지식이 바닥남

 

함수 객체 (Func Object)는 함수 참조 Func Reference로 더 많이 불리는 거 같은데, 후자가 더 의미에 가까운 것 같습니다
말 그대로, 변수가 함수를 참조할 수 있게 하는 거죠. 해당 변수는 함수로의 포인터라고 이해해도 되고요

 

fn := Func("더하기") ; fn이 더하기 함수를 참조하도록 함
MsgBox % fn.Call(10, 10) ;함수 호출

 

더하기(X, Y)
{
 return X + Y
}

 

정말 신기하지 않습니까!!!?
이를 사용하면 라벨을 기본적으로 사용하는 셋타이머가 함수를 실행하게 할 수도 있습니다

 

#Persistent
fn := Func("알림")
SetTimer, % fn, 5000 ; 5초마다 알림 함수 호출

 

알림()
{
 MsgBox, 0, , 안녕, 3
}

 

사전에 파라미터를 설정해둘 수도 있습니다

 

#Persistent
fn := Func("알림").Bind("파라미터 바인드")
SetTimer, % fn, 5000 ; 5초마다 알림 함수 호출

알림(Txt)
{
 MsgBox, 0, , % Txt, 3
}


이후에는 클래스와 멀티 스레드에 대해 알아보도록 하겠습니다, 언제 작성할지는 지금은 모르겠네요

  1. 세준 2015.12.11 11:13 신고

    항상 글 잘 보구 있습니다. 다음에 포스팅하실 클래스가 궁금하네요 ^^ 오토핫키 L 이후부터는 도움말에는 정보가 넘 적은 거 같아서 혼자 익히기 어려움니 있네요..

  2. 구리 2015.12.28 20:50 신고

    좋은 강의 항상 감사합니다. 멀티 스레드 관련한 내용이 더욱 기다려지네요.^^ 함수에 관해서 약간 어렵고 거부감 들어서 잘 사용하지 않았는데 덕분에 스크립트도 깔끔하게 유지할 수 있게 될 것 같습니다. 감사합니다.

  3. 새우깡 2016.03.31 01:57 신고

    깔끔한 강좌 잘 보고 있습니다.
    프로그램에 대해서 아무것도 모르는 상태에서 오토핫키를 배워 업무에 아주 유용하게 사용하고 있습니다.
    간단한 코드로 시작해서 함수의 사용으로 코드를 줄였고
    이번에는 클래스를 사용해서 더 효율적인 코드를 짜고 싶은데...
    제가 이해, 활용할 수 있는 강좌 찾기가 쉽지 않네요.
    시간 되실때 클래스 강좌 업데이트 해주시면 감사하겠습니다.

    알찬 강좌 기대합니다!

    • BlogIcon 예지력 2016.05.04 16:17 신고

      정말 적고 싶은데, 일상에 치여 따로 글 작성할 시간이 안 나네요 주륵..

로다 플레이어 Air 는 팟수들의 대만 임시정부 라이브하우스인을 시청할 수 있는 프로그램입니다

 

Air ?

기존 로다플레이어에 자동업데이트 기능이 추가되었습니다

실행시마다 버전을 확인할 수 있고, '업데이트 노트' 버튼을 클릭해 체인지로그를 확인할 수 있습니다

 

 

다운로드

로다플레이어 Air.zip

*아바스트(Avast) 백신은 프로그램을 바이러스로 오진하고 있습니다, 예외설정에 로다플레이어를 추가하세요

 

 

도움주신 분들

공대생, RONGSPORTS

 

 

Dev

로다 플레이어 Air는 AutoHotkey 로 작성된 오픈소스 프로그램입니다

개발에 참여하고싶으면 댓글 또는 GitHub issue 를 남겨주세요, 프로젝트는 GitHub 로 개발됩니다

'Deprecated > 로다 플레이어' 카테고리의 다른 글

로다 플레이어 Air  (76) 2015.10.17
1.2.1 Nightly Build  (5) 2015.10.10
로다 플레이어 1.2  (3) 2015.10.09
1.1.3  (0) 2015.10.08
1.1.2  (1) 2015.10.06
로다플레이어 1.1 베타  (8) 2015.10.05
  1. 이전 댓글 더보기
  2. 안되요 2015.11.08 22:00 신고

    윈7 64 ultimate 운영체제사용자인데요.
    첫 1회 사용 후 실행시키면 프로세스창에 로다플레이어는 뜨는데 작동이 안되네요.
    위에서 말한 인터넷 임시폴더 싹 지우고 해봤는데도 안되네요.
    방법이 없는건가요?

    • BlogIcon 예지력 2015.11.09 00:43 신고

      해당 문제를 수정하고 있습니다, 완료되면 새로 올릴거에요

  3. 느려짐 2015.11.09 00:29 신고

    잘쓰고 있습니다.
    로더 자체가 느려짐이 심합니다.
    켜놓고 조금만 써도 반응을 안합니다. 그나마 오래 쓸려면 다음팟모드로하면 좀더 오래가긴하는데
    이것도 팟플레이어는 정상적으로 있으나 로더는 반응을 안해서 다른방송 보고싶으면
    껐다 켜야됩니다

    • BlogIcon 예지력 2015.11.09 00:44 신고

      프리징 오류는 해결했다고 생각했는데 아직 아닌가 보네요, 점검해보겠습니다

  4. 초인 2015.11.09 23:43 신고

    런타임오류가발생하네요댓글 이이상하게 써지네요물결표시는런타임오류 라는글씨가들어갑니다 그리고마지막줄에는 The Thread has exited
    Line #
    040: throw, exception("~~~~")

  5. 차이 2015.11.15 23:17 신고

    잘사용하고 있었는데 오늘부터 갑자기 실행후 무한로딩에 빠지면서 프로그램이 정상실행이 되지가 않습니다.
    해결 방법이 없을까요?

  6. 보미짱 2015.11.16 23:40 신고

    지금 poooo말고 로다플 자체로 방송을보는데, 갑자기 채팅이 안됨.
    글쓰고 엔터눌러도 채팅이 안됨.
    박수-추천 아이콘도 사라지고, 채팅은 안되고, 이상해졌음. ㅜㅜ

  7. BlogIcon 예지력 2015.11.17 11:00 신고

    라이브하우스인의 최근 업데이트가 플레이어를 고장나게 했습니다
    제가 12월 12일까지는 정말 시간이없어서, 임시로 플러그인(접착)형식으로 변경해두었습니다
    pooo를 사용하시거나, 기존에 로다플레이어-다음팟모드로 시청하시던 분들은 플러그인 방식도 맘에 들거라고 생각합니다

  8. 흠.. 2015.11.17 11:55 신고

    실행하면 다음팟플레이어 위와 오른쪽에 하얀색 박스가 생기는데 메뉴같은건 하나도 없고 방송 볼 방법이 없습니다

  9. 호뭐심슨 2015.11.17 12:20 신고

    저도 윗분과 같은 현상입니다

  10. BlogIcon 예지력 2015.11.17 13:57 신고

    아... ㅠㅠ 조금 있다가 롤백할게요

    - 오후 1:56, 롤백 완료

  11. 이용자 2015.11.22 16:48 신고

    로다플레이어 air 버전 다운받아서 실행했는데
    12월 12일전에는 오류수정이나 업데이트는 없습니다 창만 뜨고 플레이어가 실행이 안되요
    어베스트도 쓰지 않는데...

    • 같은현상 2015.11.22 23:23 신고

      같은현상 발생하고있는 윈10 유저 한명 추가요

  12. 유저 2015.11.22 18:40 신고

    Scipt File not sound:
    \\.\pipe\Air
    메세지가 뜨면서 실행이 안됩니다.
    제가 무엇을 살펴봐야 할까요?
    Windows 7 64bit Kor Ulti. 사용중입니다.

  13. BlogIcon 예지력 2015.11.23 04:04 신고

    컴퓨터 환경에 따른 에러수정은 수정하는데 오래걸리는데, 지금은 제가 많이 바빠서 금방은 힘듭니다, 12월 12일 전에는요.
    그래도 시간날때, 계속 확인을 하고있습니다. 참고해주세요

    • 이용자 2015.11.26 19:29 신고

      그렇군요....고생 많으십니다! 천천히 해주세요

  14. scy 2015.11.26 22:23 신고

    바탕화면에 반투명의
    로다 플레이어 Air
    ~~~~~~
    채팅오류는 크롬으로 해결해 주세요 (__)
    라고만 뜨고 아무리 기다려도 아무것도 진행되지 않습니다.
    이건 무슨 문제일까요? 이전버전을 다운받았을 때에는 뭔가 뜨긴 떴었는데 말이죠

    • BlogIcon 예지력 2015.11.27 00:35 신고

      이전 버전이 작동되었다면 더 확인하기가 힘드네요, 관리자 권한으로 실행해보시겠어요? 자동으로 관리자 권한을 얻지만 수동으로 해야 실행이 정상적으로 된다는 분들도 몇몇 계셔서요

  15. BlogIcon 예지력 2015.11.27 00:39 신고

    이래저래 문제가 많은 프로그램 사용해주시는 분들 감사합니다

    실행조차 안되시는 분들이 몇 분 계신 거 같아서 새로운 버전의 코드를 처음부터 아예 새롭게, 쓰는 중입니다, 새벽에 20~30분씩 시간 내서 제작 중인 건데 이제는 대충 기능이 완성된 것 같아요, 곧 뵙겠습니다!

  16. ㅇㄴ 2015.12.17 10:13 신고

    그동안 잘됬었는데 최근에는 실행해도 아무 반응이 없네요

    오늘은 실행하니까 뜬금없이 이 홈페이지로 가져요 https://github.com/Visionary1/LodaPlugin#loda-plugin

  17. ㅇㅇ 2015.12.17 15:21 신고

    지금 작업중이신거같은데 로다플레이어 언제쯤 다시 가능하나요?

    • BlogIcon 예지력 2015.12.17 15:46 신고

      플러그인으로 교체할 예정이에요
      링크로 이동되는 곳에서 플러그인 받아서 사용해주세요!

  18. 팟수 2015.12.25 05:21 신고

    안녕하세요. 흔한 팟수입니다.
    플러그인 다운 받아 쓰려는데 전혀 작동이 안되네요.;;
    방송 목록은 나오는데 방송이 안켜집니다. 그리고 설정창도 창 드래고할때만 보여서 설정도 불가능하고요;
    메리크리스마스

    • BlogIcon 예지력 2015.12.25 09:56 신고

      팟플레이어를 최신버전으로 업데이트해보시겠어요?
      위의 반투명의 방송창은 마우스호버시에 나타나요!

  19. 팟수2 2015.12.26 12:54 신고

    저도 윗분과 같은 증상인데 플러그인 설치 까지 완료 하고 팟플실행시 위에 방송 목록등
    투명한 방송창까지 뜨는데 막상 방송 클릭해서 실행해 보면 방송은 안나오고 검은화면에 밑에 초만 지나가네요
    ㅜㅜ

  20. 팟수 2015.12.27 22:05 신고

    로다 플러그인 사용중입니다.
    시청중에 방송 목록을 새로 받아오려고 하면 껐다 다시 켜야 돼서 불편하네요
    설정에 목록 새로 받아오기 기능도 추가했으면 합니다
    그럼 해피뉴이어

  21. 제로사키 2016.01.08 04:12 신고

    감사해요'ㅁ'/

Language : AutoHotkey_L

Author : HotKeyit

Function : Wait for a window to be created

Source : http://ahkscript.org/boards/viewtopic.php?f=6&t=1274

 

라이브러리

'프로그래밍 > Archive' 카테고리의 다른 글

[Lib] Class Msgbox  (6) 2015.11.27
[Lib] CleanNotify  (4) 2015.11.21
WinWaitCreated()  (0) 2015.10.17
MS Office Style Gui 프로토타입  (3) 2015.10.09
GetActiveObjects 활성중인 객체를 불러온다  (0) 2015.03.04
L 유니코드32비트 1.1.19.03  (11) 2015.02.21

 

개발자는 깔끔하고 일관성있는 코드를 작성하는것이 중요합니다
규모가 큰 프로젝트를 진행중이라면 더욱 중요하죠, 코드의 상태가 프로그램의 유지보수에 많은 영향을 끼치기 때문에요

 

그래서 제가 코드를 최적화하기 위해 사용했던,하고있는 방법 몇가지를 소개하고자 합니다
많은 분들이 영감을 얻었으면 좋겠어요. 시작하겠습니다

 

01. 변수 값저장, 함수호출은 콤마로 연속해서 작성

 

변수에 값을 저장할때, 일반적으로는 아래처럼 코드를 작성합니다

 

이름 := "예지력"
성별 := "남성"
거주지 := "서울"

 

변수의 종류가 적은 경우, 위 처럼 작성해도 코드가 크게 길어지진 않지만
변수의 종류가 많은 경우에는 저장할때마다 다음줄로 넘겨주니 코드가 길어지죠


그런데 알고 계셨나요?

변수는 콤마(,)로 넘기면서 저장할 수 있습니다

 

이름 := "예지력", 성별 := "남성", 거주지 := "서울"

 

함수의 경우도 마찬가지입니다

 

함수1(), 함수2()

 

이는 깔끔한 코드를 유지할 수 있는것 뿐만 아니라 코드의 속도를 약 35% 높여줍니다

 

 

02. 비슷한 변수끼리는 오브젝트로 저장해두기

 

변수를 많이 사용하는 경우, 가끔 변수끼리 헷갈려 잘못 사용하거나 이름을 까먹는 경우가 있죠
비슷한 종류의 변수끼리는 함께 묶고싶은 경우도 있고요

 

이름1 := "예지력", 성별1 := "남성", 거주지1 := "서울"
이름2 := "독자", 성별2 := "여성", 거주지 := "서울"

 

이렇게 이름1,이름2,이름3.. 늘리며 저장하기엔 번거롭고, 나중에 변수를 사용할때도 헷갈릴 수 있습니다
이런 경우에, 변수를 오브젝트로 저장해두도록 하면 편하죠

 

시민1  := {이름: "예지력", 성별: "남성", 거주지: "서울"}
시민2 := {이름: "독자", 성별: "여성", 거주지: "서울"}
MsgBox % "시민1이름-" 시민1.이름 "`n시민1성별-" 시민1.성별 "`n시민1거주지-" 시민1.거주지

 

시민1.이름 := "변경된 이름"
시민1.성별 := "변경된 성별"
시민1.거주지 := "변경된 거주지"
MsgBox % "시민1이름-" 시민1.이름 "`n시민1성별-" 시민1.성별 "`n시민1거주지-" 시민1.거주지

 

 

03. 반복적으로 사용되는 명령어는 함수로

 

명령어...
Send, a
Send, b
Send, c

 

명령어...
Send, a
Send, b
Send, c
명령어...

 

위 코드에서 Send 부분이 반복적으로 사용되는걸 확인할 수 있습니다. 중복되는 부분은 함수로 묶어서 코드의 일관성을 높여보세요

 

명령어...
SendFunc()

 

명령어...
SendFunc()
명령어...

 

SendFunc()
{
 Send, a
 Send, b
 Send, c
}

 

 

04. 셋타이머, 핫키 라벨은 함수로 전환 (함수바인딩)

 

SetTimer, 라벨, ... 
Hotkey, F1, 라벨 ...

 

라벨:
명령어...
return

 

일반적으로 이렇게 사용하지만, 라벨의 사용은 코드의 깔끔함을 해치고, 유지보수가 힘들어집니다
오토핫키 공식도움말에서도 라벨의 사용을 권장하지 않습니다. 같은 이유로 goto 또한.

 

따라서, 함수를 사용해야겠는데... 그냥 라벨명에다가 함수이름적으면 되는게 아닙니다

 

함수를 하나의 변수(사실, 오브젝트)에 저장하고 라벨부분에 변수로 넘겨야해요

 

BindFunc := Func("함수명")     ; '함수명' 함수를 BindFunc오브젝트에 저장
SetTimer, %BindFunc%, ...       ; BindFunc 오브젝트를 라벨로써 사용
Hotkey, F1, %BindFunc% ...

 

함수명()
{
 명령어...
}

 

 

05. %변수% 를 많이 사용한다면 % 변수 로 통일

 

오토핫키에서 트레디셔널이라고 불리는 방식으로 변수를 표현할때는 %변수% 를 사용합니다
트레디셔널 방식으로  변수를 사용하려면 아래 코드처럼 적어야합니다

 

이름 := "예지력", 성별 := "남자", 거주지 := "서울"
MsgBox, %이름% %성별% %거주지%

 

히자만 익스프레션 표현식을 사용하면 이럴 필요가 없죠

 

이름 := "예지력", 성별 := "남자", 거주지 := "서울"
MsgBox, % 이름 성별 거주지

 

익스프레션에 대해 알아보려면 클릭하세요

 

06. 파일인스톨을 사용하는 경우, .zip 파일로

 

배포할 프로그램이 실행파일외에도 다른 리소스가 필요할때 파일인스톨로 함께 컴파일하곤 합니다

 

FileInstall, 1.png, %A_Temp%\1.png
FileInstall, 2.png, %A_Temp%\2.png
FileInstall, 3.png, %A_Temp%\3.png
FileInstall ... ;언제 다 적지?

 

그런데, 이렇게 코드를 작성하려면 굉장히 귀찮습니다
이 문제가 코드가 길어지고 더러워보이는거 보다 더 심각하죠

 

이런 경우에는 리소스파일을 .Zip으로 압축하고, 프로그램 실행시 .Zip의 압축을 풀면 되겠습니다
* 윈도우 네이티브 오브젝트를 이용하니 알집과 같은 외부툴이 없어도 됩니다

 

FileInstall, 리소스.zip, %A_Temp%\리소스.zip, 1  ;ZIP 파일


Zip := ComObjCreate("Shell.Application")  ;쉘 오브젝트 생성
Folder := Zip.NameSpace(A_Temp "\리소스.zip")   ; .ZIP 압축파일 지정, 여기서는 임시폴더(A_Temp)\리소스.zip
NewFolder := Zip.NameSpace(A_Temp)                ; 압축을 풀 경로 설정, 여기서는 임시폴더(A_Temp)


NewFolder.CopyHere(Folder.items, 4|16)          ; 압축해제, 임시폴더(A_Temp)에 리소스.zip 압축을 품, 항상 덮어씌움

  1. 야크모 2015.10.21 14:00 신고

    감히 여쭙습니다.
    06. 파일인스톨을 사용하는 경우 의 소스 중에
    ;;;;;;;;;;;;;;;;;
    NewFolder.CopyHere(Folder.items, 4|16) ; 압축해제, 임시폴더(A_Temp)에 리소스.zip 압축을 품, 항상 덮어씌움
    ;;;;;;;;;;;;;;;;
    이 부분을 항상 덮어 씌움이 아닌 폴더 존재시 그냥 압축해제를 하지 않는 코드가 있는지 궁금합니다.

    매번 실행시 다수의 파일을 압축해제 시키다 보니 렉이 심하네요. 처음 실행때 압축해제 되어 특정 폴더에 파일이 해제된 경우
    재차 실행시에는 기존에 폴더가 존재함을 확인하고 그냥 넘어갈 수 있을까요?

    항상 많이 배우고 갑니다. 질문 전에 이 말씀 먼저 드렸어야 했었으나 이해부탁드립니다.^^

  2. 야크모 2015.10.21 15:00 신고

    IfNotExist, 폴더경로
    NewFolder.CopyHere(Folder.items, 4|16)

    이렇게 하니 가능하네요~ 조언 정말 감사드립니다.
    생소한 CopyHere 명령어에 당황해서 사실은 [4|16] 이것이 무슨 뜻인가 계속 알아보고 있었습니다;; 엉뚱한데서 헤매고 있었네요

    • BlogIcon 예지력 2015.10.21 15:01 신고

      4는 메시지창 안뜨게하는거고
      16은 메시지창 팝업시 모두 예를 클릭하는거에요

  3. 하얀늑대 2015.10.31 16:50 신고

    예지력님.
    압축푸는것요. 암호걸린것도 풀 수 있나요?
    또한 압축 파일 이름을 랜덤으로 할 수 있나요?
    예를 들어 url로 zip파일을 다운 받는데 다운받을때 파일 이름을 randome, filename 해서
    파일이름을 랜덤으로 생성하는겁니다.
    filename 이라는것 자체가 변수가된거니까 이걸로 해서 풀 수 있나요?

    • BlogIcon 예지력 2015.10.31 20:04 신고

      암호는 안됩니다, 윈도우 zip기능을 이용하는거라서요

  4. BlogIcon 〃련이 2015.11.12 23:24 신고

    Random, Images
    FileInstall, Images.zip, %A_Temp%\%Images%.zip, 1

    Zip := ComObjCreate("Shell.Application") ;쉘 오브젝트 생성
    Folder := Zip.NameSpace(A_Temp "\%Images%.zip") ; .ZIP 압축파일 지정, 여기서는 임시폴더(A_Temp)\ZipName.zip
    NewFolder := Zip.NameSpace(A_Temp) ; 압축을 풀 경로 설정, 여기서는 임시폴더(A_Temp)
    NewFolder.CopyHere(Folder.items, 4|16)
    bSetMode := 0

    이렇게 해서 압축을 풀고 싶습니다. 위에 보시면알겠지만 Random 함수에 변수를 줘서 파일이름을 랜덤으로 압축 풀게 해놨는데
    저기 압축푸는곳 이름에다가 뭐라고 입력해야 하는지요? 저런식으로는 풀리지가 않네요 방법이 있을까요?

    • BlogIcon 예지력 2015.11.13 00:26 신고

      A_Temp . "/" . Images . ".zip"

      아니면,
      Des_Path := "/" . Images . ".zip"
      A_Temp . Des_Path

      /는 \(역슬래시) 인거 확인하시고요, 수정하세요

  5. BlogIcon Rahs 2016.01.20 20:09 신고

    이상하게 같은 글인데도 볼때마다 느낌이 다르고 깊이가 달리 느껴지네요.
    훌륭한 글 감사합니다.

  6. dww 2016.02.12 19:09 신고

    혹시 압축푸는 거 말인데요
    c드라이브 system32 에하려면어찌?

  7. BlogIcon Ralpy Na 2017.01.17 22:26 신고

    함수 바인딩 배우고 갑니다 ^^

Nightly Build, 수시로 업데이트 되는 개발자 버전

 

개발노트

  • – 다음팟으로 전환시, 스트리밍 서버 선택하게끔함
  • – 창 리사이즈 관련 코드 개선

 

스트리밍 서버 바꾸려면 다음팟 전환해제했다가 다시 설정하면됩니다

(플레이어:설정 → '내장플레이어 : 다음팟플레이어 사용' 을 클릭해서 OFF 한후 다시 ON)

'Deprecated > 로다 플레이어' 카테고리의 다른 글

로다 플레이어 Air  (76) 2015.10.17
1.2.1 Nightly Build  (5) 2015.10.10
로다 플레이어 1.2  (3) 2015.10.09
1.1.3  (0) 2015.10.08
1.1.2  (1) 2015.10.06
로다플레이어 1.1 베타  (8) 2015.10.05
  1. .. 2015.10.10 15:01 신고

    서버 연결상태나. 서버핑에대한 부분도 나왔으면 좋을거 같습니다.

  2. kin 2015.10.13 03:19 신고

    0xc000007b 오류ㄱㅏ 생깁니다. 다른프로그램설치하는거말고문제가안생기는방법이없을까요?

    • BlogIcon 예지력 2015.10.13 07:23 신고

      0xc000007b 오류는 윈도우 운영체제에 파일이 누락되서 발생하는 문제라서 마이크로소프트vc를 설치하셔야합니다

  3. kin 2015.10.13 11:44 신고

    저 visual studio 2010 설치하였습니다만 오류ㅜㅜ
    혹시 ㄷㅏ른버젼을설치해야 하나요?

    • BlogIcon 예지력 2015.10.13 14:25 신고

      visual studio 가 아니라 visual c요
      https://www.microsoft.com/ko-KR/download/details.aspx?id=26999

로다 플레이어는 팟수들의 대만 임시정부 라이브하우스인을 시청할 수 있는 프로그램입니다

 

업데이트 노트

1.2 업데이트는 안정성 개선사항 및 오류 수정을 포함합니다

 

  • – 푸우 사이트변경에 맞춰서 온오프 체크코드 수정
  • – 더 빠른속도를 위해 스트리밍주소 변경
  • – 내부코드 개선, 프로그램 속도올림, 용량↓
  • – 핵쉴드 오진오류 수정 (게임이 설치되있지않아 테스트X)

 

다운로드

이 버전은 더 이상 제공되지 않습니다.

여기를 클릭해 최신버전을 사용하세요

 

도움말

질문하기 전 플레이어 메뉴 → 도움말을 확인하세요. 그리고 문의할 내용이 있다면 문의 & 피드백 을 이용하세요
도움말과 현재 정보에서 이미 언급된 사항을 질문하는 경우 답변하지 않습니다

 

실행시 MSVCR100 에러가 뜬다면 여기를 클릭해 파일을 다운받아 설치하세요. 32비트 사용자 x86, 64비트 사용자 x64

 

다음팟플레이어로 시청시, 소리설정, 싱크조절 제외하고는 따로 설정 건드리지 마세요

다음팟 모드에서 채팅창이 안나온다면

여기를 클릭해 익스플로러11으로 업데이트하거나, 설치되어 있는 크롬을 사용하세요! (플레이어:설정 → 내장브라우저 크롬으로 전환)

 

알트+엔터로 다음팟모드에서 전체화면이 가능합니다, 복귀 역시 다시 알트+엔터

 

Credits

http://poooo.ml/, RONGSPORTS


'Deprecated > 로다 플레이어' 카테고리의 다른 글

로다 플레이어 Air  (76) 2015.10.17
1.2.1 Nightly Build  (5) 2015.10.10
로다 플레이어 1.2  (3) 2015.10.09
1.1.3  (0) 2015.10.08
1.1.2  (1) 2015.10.06
로다플레이어 1.1 베타  (8) 2015.10.05
  1. 파앗수 2015.10.09 13:07 신고

    이상하게 버젼업을 계속해도 도중에 플레이어가 아예 동작을 안합니다 소리만들리구.. 끌려면 또 작업관리자로 꺼야되고.
    제 컴퓨터 문제인가요?

    • BlogIcon 예지력 2015.10.09 14:06 신고

      파앗수님만 그렇다고 하시니 개인적인 문제가 맞는거같고요..
      관련문제를 수정하는 버전을 올려볼게요 그걸로 확인해보세요

  2. 1234 2015.10.09 15:53 신고

    ㄱㅅㄱㅅ

 

  • SetFormat 커맨드 사용을 자제하세요, 속도가 느려집니다
  • 기본환경변수를 제거해, 혹시모를 변수간의 충돌을 방지하고 성능을 높이기 위해서 #NoEnv 을 사용하세요
  • 오토핫키는 자동으로 최근 실행된 코드라인을 기억합니다, ListLines, Off 로 중지하세요
  • 오토핫키는 자체적으로 키로그를 남깁니다, #KeyHistory 0 으로 중지하세요
  • 프로세스의 우선순위를 높임으로서 성능향샹을 기대할 수 있습니다, Process, Priority,, High
  • Send 보다는 SendInput 을 사용하세요. 훨씬 빠르고 안정적(실행중엔 유저키입력 차단)이랍니다
  • 오토핫키는 기본적으로 라인마다 Sleep, 10 을 수행합니다, SetBatchLines, -1 으로 Sleep 을 제거해 속도를 높이세요
  • SetWinDelaySetControlDelay 를 사용해 WinControl 관련 명령어의 속도를 높이세요
  • SetKeyDelaySetMouseDelay 를 사용해 SendMouse 관련 명령어의 속도를 높이세요
  • VarSetCapacity 를 통해 사이즈가 큰 문자열변수의 메모리를 미리 설정해 속도를 높일 수 있습니다
  • 단순 true, false를 비교하는 if, else일 경우 Ternary Operator 를 사용하는것이 더 빠릅니다
  • 초기실행이후 사용되지 않을 변수는 메모리에서 제거하세요 변수명 := "" 또는 VarSetCapacity(변수명,0)
  • 코드의 메모리가 높아 줄이고 싶다면 대기상태의 라인에 DllCall("psapi.dll\EmptyWorkingSet", "Ptr", -1) 을 추가하세요

 

Reference

http://ahkscript.org/docs/commands/_NoEnv.htm
http://ahkscript.org/docs/misc/Performance.htm
http://ahkscript.org/docs/commands/VarSetCapacity.htm

http://ahkscript.org/boards/viewtopic.php?f=6&t=6413

  1. BlogIcon 오토핫키 2015.10.09 17:44 신고

    유용한 팁 매우 감사합니다.

  2. BlogIcon Rahs 2016.01.20 20:03 신고

    감사히 잘 보고 배우고 있습니다. 감사합니다!

  3. 2016.07.13 15:03 신고

    주옥같은 정보가 많네요. 포스트 하나하나 읽어보고 있습니다.
    코드 최적화하는데 굉장한 도움이 될것 같습니다. 정말 감사합니다.

+ Recent posts